home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
systems
/
minix
/
tcsh6033.zoo
/
tcsh-603.pl3
/
tcsh.1
< prev
next >
Wrap
Text File
|
1993-03-15
|
137KB
|
3,433 lines
TCSH(1) TCSH(1)
N✓NA✓AM✓ME✓E
tcsh - C shell with file name completion and command line
editing
S✓SY✓YN✓NO✓OP✓PS✓SI✓IS✓S
t✓tc✓cs✓sh✓h [ -✓-b✓bc✓cd✓de✓ef✓fi✓im✓mn✓nq✓qs✓st✓tv✓vV✓Vx✓xX✓X ] [ _✓a_✓r_✓g_✓u_✓m_✓e_✓n_✓t _✓._✓._✓. ]
or
t✓tc✓cs✓sh✓h -✓-l✓l
OS/Dependent Options
t✓tc✓cs✓sh✓h [ -✓-F✓F ] [ -✓-D✓Dn✓na✓am✓me✓e[✓[=✓=v✓va✓al✓lu✓ue✓e]✓] ]
D✓DE✓ES✓SC✓CR✓RI✓IP✓PT✓TI✓IO✓ON✓N
_✓T_✓c_✓s_✓h is an enhanced version of the Berkeley UNIX C shell
_✓c_✓s_✓h(1). It behaves exactly like the C shell, except for
the added utilities of:
1) Command line editing using Emacs-style commands.
2) Visual step up/down through the history list.
3) Terminal mode sanity checking and resetting.
4) Interactive command, file name and user name comple-
tion.
5) File/directory/user list in the middle of a typed
command.
6) Spelling correction of command, file, and user
names.
7) Lookup of command documentation in the middle of a
typed command.
8) Enhanced history mechanism.
9) Automatic locking/logout after long periods of idle
time.
10) Automatic execution of a single command prior to
printing each prompt.
11) Automatic periodic command execution.
12) A new syntax for the prompt, and the ability to set
the prompt for "while" and "for" loops.
13) Time stamps in the history list.
14) An addition to the syntax of filenames to access
entries in the directory stack, and the ability
treat symbolic links in a sane way when changing
Cornell 6.03.00 20 November 1992 1
TCSH(1) TCSH(1)
directories.
15) The ability to watch for logins and logouts by user
or terminal on the machine.
16) A scheduled event list, which specifies commands
which are to be executed at given times.
17) A new builtin that does a subset of _✓l_✓s(1).
18) An addition to the file expression syntax for a
character not in a set of characters and the ability
to negate a globbing pattern.
19) New automatically initialized environment variables
_✓H_✓O_✓S_✓T and _✓H_✓O_✓S_✓T_✓T_✓Y_✓P_✓E.
20) Commands for debugging terminal capabilities.
21) Searching for the visual history mechanism.
22) New builtins for the _✓w_✓h_✓i_✓c_✓h(1) and _✓w_✓h_✓e_✓r_✓e commands.
23) Restarting a stopped editor with two keystrokes.
24) Status line support
25) Automatic execution of a command when the current
working directory is changed.
26) Native Language System support.
27) Automatic process time reporting.
28) OS Dependent Builtin Support
29) Automatic window size adjustment
30) Input files
31) Additional/Undocumented Options
32) Enhanced history/variable modifier expansion
33) Programmable completion.
34) Enhanced file inquiry operator.
For a description of standard C-shell features, see the
_✓c_✓s_✓h manual page.
1✓1.✓. C✓CO✓OM✓MM✓MA✓AN✓ND✓D L✓LI✓IN✓NE✓E E✓ED✓DI✓IT✓TI✓IN✓NG✓G
Commands that the user types in may be edited using the
Cornell 6.03.00 20 November 1992 2
TCSH(1) TCSH(1)
same control characters that Gnu Emacs or vi uses. Arrow
and function key sequences are also allowed. _✓T_✓c_✓s_✓h allows
this by setting the terminal to `CBREAK' mode and reading
the input one character at a time.
There is a new shell command, _✓b_✓i_✓n_✓d_✓k_✓e_✓y_✓, that allows the
user to redefine what any key does, or find out what any
or all of the keys do.
Syntax: bindkey [ -a ] [ -c ] [ -s ] [ -v ] [ -e ] [ -d ]
[ -k ] [ -l ] [ -r ] [ -- ] [ [ in-string | key-name ] [
out-string | command ]]
If no values are given all bindings are listed. If only
in-string is given, bindings for the in-string is listed.
Otherwise it binds the in-string to the given out-string
or command. If out-string, this is treated as input to
_✓t_✓c_✓s_✓h when in-string is typed. This may be used recursively
to currently a level of 10 deep.
There are two basic key maps: the normal and alternative
one. The alternative is used by VI command mode. For
multi-character input the basic key maps contains a
sequence-lead-in for the first character in the input.
Options:
-a bind in-string in alternative key map
-s bind an out-string instead of a command
-c bind a unix command instead of a command
-v bind for default VI-mode
-e bind for default emacs-mode
-k interpret in-string as a symbolic arrow key name
-d bind to compiled in default
-l list functions available with short description
-r remove the binding of in-string
In strings control characters may be written as
caret-<letter> and backslash ("\") is used to escape a
character as follows:
\✓\a✓a bell character
\✓\n✓n line feed (new line)
\✓\b✓b back space
\✓\t✓t horizontal tab
\✓\v✓v vertical tab
\✓\f✓f form feed
\✓\r✓r carriage return
\✓\e✓e escape
\✓\n✓nn✓nn✓n character code in octal
In all other cases \ escapes the following character.
Needed for escaping the special meaning of \ and ^.
Delete is written as "^?" (caret-question mark).
_✓T_✓c_✓s_✓h always binds the arrow keys as defined by the termcap
Cornell 6.03.00 20 November 1992 3
TCSH(1) TCSH(1)
entry to:
up arrow up-history
down arrow down-history
right arrow forward-char
left arrow backward-char
except where these bindings would alter other single char-
acter bindings. If this is not desired one can avoid the
automatic arrow key binding using _✓s_✓e_✓t_✓t_✓c to change the
arrow key escape sequences to the empty string. The
ansi/vt100 sequences for arrow keys are always bound.
The following is a list of the default emacs and vi bind-
ings. Characters with the 8th bit set are written as
M-<character>. Note however, that unlike with the old
_✓b_✓i_✓n_✓d command (see below), the syntax M-<character> has no
special meaning to the _✓b_✓i_✓n_✓d_✓k_✓e_✓y command, and the bindings
for the sequence escape+<character> and M-<character> as
given below are handled separately (although the the
default bindings are the same). The printable ascii char-
acters not mentioned in the list are bound to the _✓s_✓e_✓l_✓f_✓-
_✓i_✓n_✓s_✓e_✓r_✓t_✓-_✓c_✓o_✓m_✓m_✓a_✓n_✓d function, which just inserts the given
character literally into the input line. The remaining
characters are bound to the _✓u_✓n_✓d_✓e_✓f_✓i_✓n_✓e_✓d_✓-_✓k_✓e_✓y function, which
only causes a beep (unless _✓n_✓o_✓b_✓e_✓e_✓p is set, of course).
EMACS bindings
"^@" -> set-mark-command
"^A" -> beginning-of-line
"^B" -> backward-char
"^C" -> tty-sigintr
"^D" -> delete-char-or-list
"^E" -> end-of-line
"^F" -> forward-char
"^G" -> is undefined
"^H" -> backward-delete-char
"^I" -> complete-word
"^J" -> newline
"^K" -> kill-line
"^L" -> clear-screen
"^M" -> newline
"^N" -> down-history
"^O" -> tty-flush-output
"^P" -> up-history
"^Q" -> tty-start-output
"^R" -> redisplay
"^S" -> tty-stop-output
"^T" -> transpose-chars
"^U" -> kill-whole-line
"^V" -> quoted-insert
"^W" -> kill-region
"^X" -> sequence-lead-in
Cornell 6.03.00 20 November 1992 4
TCSH(1) TCSH(1)
"^Y" -> yank
"^Z" -> tty-sigtsusp
"^[" -> sequence-lead-in
"^\" -> tty-sigquit
"^]" -> tty-dsusp
" " to "/" -> self-insert-command
"0" to "9" -> digit
":" to "~" -> self-insert-command
"^?" -> backward-delete-char
EMACS Multi-character and 8 bit bindings
"^[^D" or "M-^D" -> list-choices
"^[^H" or "M-^H" -> backward-delete-word
"^[^I" or "M-^I" -> complete-word
"^[^L" or "M-^L" -> clear-screen
"^[^Z" or "M-^Z" -> run-fg-editor
"^[^[" or "M-^[" -> complete-word
"^[^_" or "M-^_" -> copy-prev-word
"^[ " or "M- " -> expand-history
"^[!" or "M-!" -> expand-history
"^[$" or "M-$" -> spell-line
"^[0" or "M-0" -> digit-argument
"^[1" or "M-1" -> digit-argument
"^[2" or "M-2" -> digit-argument
"^[3" or "M-3" -> digit-argument
"^[4" or "M-4" -> digit-argument
"^[5" or "M-5" -> digit-argument
"^[6" or "M-6" -> digit-argument
"^[7" or "M-7" -> digit-argument
"^[8" or "M-8" -> digit-argument
"^[9" or "M-9" -> digit-argument
"^[?" or "M-?" -> which-command
"^[B" or "M-B" -> backward-word
"^[C" or "M-C" -> capitalize-word
"^[D" or "M-D" -> delete-word
"^[F" or "M-F" -> forward-word
"^[H" or "M-H" -> run-help
"^[L" or "M-L" -> downcase-word
"^[N" or "M-N" -> history-search-forward
"^[P" or "M-P" -> history-search-backward
"^[R" or "M-R" -> toggle-literal-history
"^[S" or "M-S" -> spell-word
"^[U" or "M-U" -> upcase-word
"^[W" or "M-W" -> copy-region-as-kill
"^[_" or "M-_" -> insert-last-word
"^[b" or "M-b" -> backward-word
"^[c" or "M-c" -> capitalize-word
"^[d" or "M-d" -> delete-word
"^[f" or "M-f" -> forward-word
"^[h" or "M-h" -> run-help
"^[l" or "M-l" -> downcase-word
"^[n" or "M-n" -> history-search-forward
"^[p" or "M-p" -> history-search-backward
Cornell 6.03.00 20 November 1992 5
TCSH(1) TCSH(1)
"^[r" or "M-r" -> toggle-literal-history
"^[s" or "M-s" -> spell-word
"^[u" or "M-u" -> upcase-word
"^[w" or "M-w" -> copy-region-as-kill
"^[^?" or "M-^?" -> backward-delete-word
"^X^X" -> exchange-point-and-mark
"^X*" -> expand-glob
"^X$" -> expand-variables
"^XG" -> list-glob
"^Xg" -> list-glob
"^Xn -> normalize-path
"^XN -> normalize-path
VI Insert Mode functions
"^@" -> is undefined
"^A" -> beginning-of-line
"^B" -> backward-char
"^C" -> tty-sigintr
"^D" -> list-or-eof
"^E" -> end-of-line
"^F" -> forward-char
"^G" -> list-glob
"^H" -> backward-delete-char
"^I" -> complete-word
"^J" -> newline
"^K" -> kill-line
"^L" -> clear-screen
"^M" -> newline
"^N" -> down-history
"^O" -> tty-flush-output
"^P" -> up-history
"^Q" -> tty-start-output
"^R" -> redisplay
"^S" -> tty-stop-output
"^T" -> transpose-chars
"^U" -> backward-kill-line
"^V" -> quoted-insert
"^W" -> backward-delete-word
"^X" -> expand-line
"^Y" -> tty-dsusp
"^Z" -> tty-sigtsusp
"^[" -> vi-cmd-mode
"^\" -> tty-sigquit
" " to "~" -> self-insert-command
"^?" -> backward-delete-char
VI Command Mode functions
"^@" -> is undefined
"^A" -> beginning-of-line
"^B" -> is undefined
"^C" -> tty-sigintr
Cornell 6.03.00 20 November 1992 6
TCSH(1) TCSH(1)
"^D" -> list-choices
"^E" -> end-of-line
"^F" -> is undefined
"^G" -> list-glob
"^H" -> backward-char
"^I" -> vi-cmd-mode-complete
"^J" -> newline
"^K" -> kill-line
"^L" -> clear-screen
"^M" -> newline
"^N" -> down-history
"^O" -> tty-flush-output
"^P" -> up-history
"^Q" -> tty-start-output
"^R" -> redisplay
"^S" -> tty-stop-output
"^T" -> is undefined
"^U" -> backward-kill-line
"^V" -> is undefined
"^W" -> backward-delete-word
"^X" -> expand-line
"^[" -> sequence-lead-in
"^\" -> tty-sigquit
" " -> forward-char
"!" -> expand-history
"$" -> end-of-line
"*" -> expand-glob
"+" -> down-history
";" -> vi-repeat-char-fwd
"," -> vi-repeat-char-back
"-" -> up-history
"." -> is undefined
"/" -> vi-search-back
"0" -> vi-zero
"1" to "9" -> digit-argument
"?" -> vi-search-fwd
"@" -> is undefined
"A" -> vi-add-at-eol
"B" -> vi-word-back
"C" -> change-till-end-of-line
"D" -> kill-line
"E" -> vi-endword
"F" -> vi-char-back
"I" -> vi-insert-at-bol
"J" -> history-search-forward
"K" -> history-search-backward
"N" -> vi-search-back
"O" -> sequence-lead-in
"R" -> vi-replace-mode
"S" -> vi-substitute-line
"T" -> vi-charto-back
"U" -> is undefined
"V" -> expand-variables
"W" -> vi-word-fwd
Cornell 6.03.00 20 November 1992 7
TCSH(1) TCSH(1)
"X" -> backward-delete-char
"[" -> sequence-lead-in
"\^" -> beginning-of-line
"a" -> vi-add
"b" -> backward-word
"c" -> is undefined
"d" -> vi-delmeta
"e" -> vi-eword
"f" -> vi-char-fwd
"h" -> backward-char
"i" -> vi-insert
"j" -> down-history
"k" -> up-history
"l" -> forward-char
"m" -> is undefined
"n" -> vi-search-fwd
"r" -> vi-replace-char
"s" -> vi-substitute-char
"t" -> vi-charto-fwd
"u" -> vi-undo
"v" -> expand-variables
"w" -> vi-beginning-of-next-word
"x" -> delete-char
"~" -> change-case
"^?" -> backward-delete-char
"M-?" -> run-help
"M-[" -> sequence-lead-in
"M-O" -> sequence-lead-in
VI Multi-character bindings
"^[?" -> run-help
In _✓t_✓c_✓s_✓h there are two input modes: _✓i_✓n_✓s_✓e_✓r_✓t and _✓o_✓v_✓e_✓r_✓w_✓r_✓i_✓t_✓e_✓.
All characters that are bound to the _✓s_✓e_✓l_✓f_✓-_✓i_✓n_✓s_✓e_✓r_✓t_✓-_✓c_✓o_✓m_✓m_✓a_✓n_✓d
either get inserted or overwrite what was under the cursor
depending on the input mode. In emacs one can toggle
between modes using the _✓o_✓v_✓e_✓r_✓w_✓r_✓i_✓t_✓e_✓-_✓m_✓o_✓d_✓e function, and in VI
one can use any of the replace mode commands. By default
the mode is preserved between input lines. To specify a
default mode that can be enforced at the beginning of each
command line, the variable _✓i_✓n_✓p_✓u_✓t_✓m_✓o_✓d_✓e can be set to either
_✓i_✓n_✓s_✓e_✓r_✓t or _✓o_✓v_✓e_✓r_✓w_✓r_✓i_✓t_✓e_✓.
There is also an older version of bindkey called _✓b_✓i_✓n_✓d_✓,
that allows the user to redefine what any key does, or
find out what any or all of the keys do. This is retained
for compatibility reasons.
If given two arguments _✓b_✓i_✓n_✓d binds the function (first
argument) to the given key (second argument). The key may
be: the direct character or a caret-<letter> combination,
which is converted to control-<letter>; M-<letter> for an
Cornell 6.03.00 20 November 1992 8
TCSH(1) TCSH(1)
escaped character; or F-<string> for a function key. For
the last of these, the function key prefix must be bound
to the function "sequence-lead-in" and the string speci-
fied to the _✓b_✓i_✓n_✓d command must not include this prefix.
If given one argument _✓b_✓i_✓n_✓d takes the argument as the name
for a key and tells what that key does. As a special
case, the user can say
bind emacs
or
bind vi
to bind all the keys for Emacs or vi mode respectively.
If given no arguments _✓b_✓i_✓n_✓d tells what all of the keys do.
If you give bind the single argument of 'defaults', it
resets each key to its default value (see the above list).
2✓2.✓. V✓VI✓IS✓SU✓UA✓AL✓L H✓HI✓IS✓ST✓TO✓OR✓RY✓Y
The keys ^P and ^N are used to step up and down the his-
tory list. If the user has typed in the following:
> ls
foo bar
> echo mumble
mumble
>
then enters _✓^_✓P_✓, the shell will place "echo mumble" into
the editing buffer, and will put the cursor at the end of
the line. If another _✓^_✓P is entered, then the editing line
will change to "ls". More _✓^_✓Ps will make the bell ring,
since there are no more lines in the history. _✓^_✓N works
the same way, except it steps down (forward in time).
An easy way to re-do a command is to type _✓^_✓P followed by
_✓R_✓e_✓t_✓u_✓r_✓n_✓. Also, pieces of previous commands can be assem-
bled to make a new command. The commands that work on
regions are especially useful for this.
_✓^_✓P and _✓^_✓N actually only copy commands from out of the his-
tory into the edit buffer; thus the user may step back
into the history and then edit things, but those changes
do not affect what is actually in _✓t_✓c_✓s_✓h _✓'_✓s history.
Another way to recall (parts of) history commands is via
the 'expand-history' function. A variation of the 'expand-
history' function is called 'magic-space'. This function
expands _✓c_✓s_✓h history, and always appends a space. Magic-
space thus can be bound to <space>, to automatically
expand _✓c_✓s_✓h history. Expand-history is normally bound to
_✓M_✓-_✓<_✓s_✓p_✓a_✓c_✓e_✓> and magic-space is not bound.
Cornell 6.03.00 20 November 1992 9
TCSH(1) TCSH(1)
3✓3.✓. T✓TT✓TY✓Y M✓MO✓OD✓DE✓E S✓SA✓AN✓NI✓IT✓TY✓Y
As part of the editor, _✓t_✓c_✓s_✓h does a check and reset of the
terminal mode bits. If the speed has been changed, then
_✓t_✓c_✓s_✓h will change to using that speed. _✓T_✓c_✓s_✓h will also obey
changes in the padding needed by the tty. Also, the shell
will automatically turn off RAW and CBREAK (on systems
that use _✓t_✓e_✓r_✓m_✓i_✓o_✓(_✓7_✓) it will turn on ICANON) modes, and will
turn on the tty driver's output processing (OPOST).
The list of the tty modes that are always set or cleared
by _✓t_✓c_✓s_✓h can be examined and modified using the _✓s_✓e_✓t_✓t_✓y
builtin. The _✓s_✓e_✓t_✓t_✓y display is similar to _✓s_✓t_✓t_✓y_✓(_✓1_✓)_✓, and
varies depending on the system's tty driver. Modes that
_✓t_✓c_✓s_✓h will always try to set are shown as _✓+_✓m_✓o_✓d_✓e _✓. Modes
that _✓t_✓c_✓s_✓h will always try to clear are shown as _✓-_✓m_✓o_✓d_✓e and
modes that tcsh will track and allow to be modified are
not shown by default, or if the _✓-_✓a flag is given, are
shown without a leading sign. For tty characters, _✓-_✓c_✓h_✓a_✓r
disables the tty character, while _✓+_✓c_✓h_✓a_✓r protects the tty
character from being changed.
Setty can be used to control the three different modes
_✓t_✓c_✓s_✓h uses for the tty. The default mode displayed is the
"execute" mode which is used when tcsh executes commands.
The two other modes are the "edit" mode and the "quote"
mode. The "edit" mode is used for command line editing,
and the "quote" mode is used when entering literal charac-
ters. The "execute" mode can be specified with _✓-_✓x _✓, the
"edit" mode with _✓-_✓d _✓, and the "quote" mode with _✓-_✓q For
example if one wants to set the _✓e_✓c_✓h_✓o_✓k flag and let the
_✓e_✓c_✓h_✓o_✓e pass unchanged:
> setty
iflag:-inlcr -igncr +icrnl
oflag:+opost +onlcr -onlret
cflag:
lflag:+isig +icanon +echo +echoe -echok -echonl -noflsh
+echoctl -flusho +iexten
chars:
> setty +echok echoe
> setty
iflag:-inlcr -igncr +icrnl
oflag:+opost +onlcr -onlret
cflag:
lflag:+isig +icanon +echo +echok -echonl -noflsh +echoctl
-flusho +iexten
chars:
4✓4.✓. W✓WO✓OR✓RD✓D C✓CO✓OM✓MP✓PL✓LE✓ET✓TI✓IO✓ON✓N
In typing commands, it is no longer necessary to type a
complete name, only a unique abbreviation is necessary.
When you type a TAB to _✓t_✓c_✓s_✓h it will complete the name for
Cornell 6.03.00 20 November 1992 10
TCSH(1) TCSH(1)
you, echoing the full name on the terminal (and entering
it into the edit buffer). If the prefix you typed matches
no name, the terminal bell is rung, unless the variable
_✓n_✓o_✓b_✓e_✓e_✓p is set. The name may be partially completed if the
prefix matches several longer names. If this is the case,
the name is extended up to the point of ambiguity, and the
bell is rung. This works for file names, command names,
shell variables and the user name convention. The vari-
able _✓f_✓i_✓g_✓n_✓o_✓r_✓e may be set to a list of suffixes to be disre-
garded during completion.
_✓E_✓x_✓a_✓m_✓p_✓l_✓e
Assume the current directory contained the files:
DSC.TXT bin cmd lib memos
DSC.NEW chaos cmtest mail netnews
bench class dev mbox new
The command:
> gnumacs ch[TAB]
would cause _✓t_✓c_✓s_✓h to complete the command with the file
name chaos. If instead, the user had typed:
> gnumacs D[TAB]
_✓t_✓c_✓s_✓h would have extended the name to DSC and rung the ter-
minal bell, indicating partial completion. However, if
_✓f_✓i_✓g_✓n_✓o_✓r_✓e had previously been set to a list containing .NEW
as one element, e.g. ( .o .NEW ), _✓t_✓c_✓s_✓h would have com-
pleted the `D' to DSC.TXT.
File name completion works equally well when other direc-
tories are addressed. Additionally, _✓t_✓c_✓s_✓h understands the
C shell tilde (~) convention for home directories. In
addition it caches tilde name references for fast access.
This cache can be flushed by using the builtin _✓r_✓e_✓h_✓a_✓s_✓h_✓.
Thus,
> cd ~speech/data/fr[TAB]
does what one might expect. This may also be used to
expand login names only. Thus,
> cd ~sy[TAB]
expands to
> cd ~synthesis
Command names may also be completed, for example,
Cornell 6.03.00 20 November 1992 11
TCSH(1) TCSH(1)
> gnum[TAB]
will expand to "gnumacs" (assuming that there are no other
commands that begin with "gnum").
Shell and environment variables are recognized also and in
addition they can be expanded:
> set local=/usr/local
> echo $lo[TAB]
will expand to "$local/". Note that a slash is appended
because the expanded variable points to a directory. Also:
> set local=/usr/local
> echo $local/[^D]
bin/ etc/ lib/ man/ src/
will correctly list the contents of /usr/local. Shell and
environment variables can also be expanded via the expand-
variables function:
> echo $local/[^X$]
> echo /usr/local/
Completion also works when the cursor is in the middle of
the line, rather than just the end. All of the text after
the cursor will be saved, the completion will work (possi-
bly adding to the current name), and then the saved text
will be restored in place, after the cursor.
The behavior of the completion can be changed by the set-
ting of several shell variables:
Setting the _✓r_✓e_✓c_✓e_✓x_✓a_✓c_✓t variable makes an exact command be
expanded rather than just ringing the bell. For example,
assume the current directory has two sub-directories
called foo and food, then with _✓r_✓e_✓c_✓e_✓x_✓a_✓c_✓t set the following
could be done:
> cd fo[TAB]
to ...
> cd foo[TAB]
to ...
> cd foo/
rather than beeping on the second TAB.
If the _✓a_✓u_✓t_✓o_✓l_✓i_✓s_✓t variable is set, invoking completion when
several choices are possible will automatically list the
choices, effectively merging the functionality described
in the next section into the completion mechanism. If
_✓a_✓u_✓t_✓o_✓l_✓i_✓s_✓t is set to "ambiguous", then _✓t_✓c_✓s_✓h will only list
Cornell 6.03.00 20 November 1992 12
TCSH(1) TCSH(1)
the choices if there were no new characters added in the
completion operation.
The "noise level" can be controlled by the value that
_✓m_✓a_✓t_✓c_✓h_✓b_✓e_✓e_✓p is set to: With matchbeep=nomatch, completion
will only beep if there are no matching names; with match-
beep=ambiguous, completion will _✓a_✓l_✓s_✓o beep if there are
many possible matches; with matchbeep=notunique, comple-
tion will _✓a_✓l_✓s_✓o beep when there is an exact match but there
are other, longer, matches (see recexact). With match-
beep=never or set to any other value completion will never
beep. If matchbeep is not set it defaults to ambiguous.
If the _✓a_✓u_✓t_✓o_✓e_✓x_✓p_✓a_✓n_✓d variable is set, the expand-history
function will be invoked automatically before the comple-
tion attempt, expanding normal _✓c_✓s_✓h history substitutions.
For covert operation, the variable _✓n_✓o_✓b_✓e_✓e_✓p can be set; it
will prevent the completion mechanism, as well as _✓t_✓c_✓s_✓h in
general, from actually beeping. Finally, if the _✓a_✓u_✓t_✓o_✓c_✓o_✓r_✓-
_✓r_✓e_✓c_✓t variable is set, the spelling correction is attempted
for any path components up to the completion point.
5✓5.✓. L✓LI✓IS✓ST✓TI✓IN✓NG✓G O✓OF✓F P✓PO✓OS✓SS✓SI✓IB✓BL✓LE✓E N✓NA✓AM✓ME✓ES✓S
At any point in typing a command, you may request "what
names are available". Thus, when you have typed, perhaps:
> cd ~speech/data/fritz/
you may wish to know what files or sub-directories exist
(in ~speech/data/fritz), without, of course, aborting the
command you are typing. Typing the character Control-D
(^D), will list the names (files, in this case) available.
The files are listed in multicolumn format, sorted column-
wise. Directories are indicated with a trailing `/', exe-
cutable files with a `*', symbolic links with a '@', sock-
ets with a '=', FIFOs (named pipes) with a '|', character
devices with a '%', and block devices with a '#'. Once
printed, the command is re-echoed for you to complete.
Additionally, one may want to know which files match a
prefix. If the user had typed:
> cd ~speech/data/fr[^D]
all files and sub-directories whose prefix was ``fr''
would be printed. Notice that the example before was sim-
ply a degenerate case of this with a null trailing file
name. (The null string is a prefix of all strings.)
Notice also, that a trailing slash is required to pass to
a new directory for both file name completion and listing.
Cornell 6.03.00 20 November 1992 13
TCSH(1) TCSH(1)
The degenerate
> ~[^D]
will print a full list of login names on the current sys-
tem. Note, however, that the degenerate
> <Spaces>[^D]
does not list all of the commands, but only the files in
the current working directory.
Listing/expanding of words that match a name containing
wildcard characters can be done via the list-glob/expand-
glob function:
> ls
foo.c bar.c a.out
> vi *.c[^Xg]
foo.c bar.c
> vi *.c[^X*]
> vi foo.c bar.c
C✓Co✓om✓mm✓ma✓an✓nd✓d N✓Na✓am✓me✓e R✓Re✓ec✓co✓og✓gn✓ni✓it✓ti✓io✓on✓n
Command name recognition and completion works in the same
manner as file name recognition and completion above. The
current value of the environment variable _✓P_✓A_✓T_✓H is used in
searching for the command. For example
> newa[TAB]
might expand to
> newaliases
Also,
> new[^D]
would list all commands (along PATH) that begin with
"new".
Note that Control-D has three different effects on _✓t_✓c_✓s_✓h_✓.
On an empty line (one that contains nothing, not even
spaces), _✓^_✓D sends an EOF to _✓t_✓c_✓s_✓h just as it does for nor-
mal programs. When the cursor is in the middle of a line
of text, _✓^_✓D deletes the character that the cursor is
under. Finally, a _✓^_✓D at the end of a line of text lists
the available names at that point. To get a list of
available names when the cursor is in the middle of a line
(or on an empty line), a Meta-Control-D should be typed
(Escape followed by Control-D).
Cornell 6.03.00 20 November 1992 14
TCSH(1) TCSH(1)
6✓6.✓. S✓SP✓PE✓EL✓LL✓LI✓IN✓NG✓G C✓CO✓OR✓RR✓RE✓EC✓CT✓TI✓IO✓ON✓N
If while typing a command, the user mistypes or misspells
a file name, user name, or command name, _✓t_✓c_✓s_✓h can correct
the spelling. When correcting a file name, each part of
the path is individually checked and corrected. Spelling
correction can be invoked in several different ways:
The _✓s_✓p_✓e_✓l_✓l_✓-_✓w_✓o_✓r_✓d function, normally bound to M-s (and M-S),
will attempt to correct the word immediately before the
cursor. For example, suppose that the user has typed:
> cd /uxr/spol/news[ESC s]
_✓T_✓c_✓s_✓h will check the path for spelling, correct the mis-
takes, and redraw the line as
> cd /usr/spool/news
leaving the cursor at the end of the line.
Spelling correction of the entire command line (indepen-
dent of where the cursor is) can be done with the _✓s_✓p_✓e_✓l_✓l_✓-
_✓l_✓i_✓n_✓e function, normally bound to M-$ (Escape Dollar-sign).
It will check each word independently, but in order to
avoid e.g. command options, no correction is attempted on
words whose first character is found in the string
"!.\^-*%".
Finally, automatic spelling correction will be done each
time the Return key is hit, if the _✓c_✓o_✓r_✓r_✓e_✓c_✓t variable is set
to an appropriate value: correct=cmd will cause the
spelling of the command name only to be checked, while
correct=all causes checking of all words on the line, like
the spell-line function. If any part of the command line
is corrected, the user will be given a special prompt as
defined by the _✓p_✓r_✓o_✓m_✓p_✓t_✓3 variable, followed by the corrected
line, e.g.
> lz /usr/bin
CORRECT>ls /usr/bin (y|n|e)?
Answering 'y' or <space> at the prompt will cause the cor-
rected line to be executed, 'e' will leave the uncorrected
command in the input buffer and anything else will execute
the original line unchanged.
Automatic correction is not guaranteed to work the way the
user intended. Command line parsing is done in a rudimen-
tary fashion. It is mostly provided as an experimental
feature. Suggestions and improvements are welcome.
7✓7.✓. D✓DO✓OC✓CU✓UM✓ME✓EN✓NT✓TA✓AT✓TI✓IO✓ON✓N L✓LO✓OO✓OK✓KU✓UP✓P
The editor function _✓r_✓u_✓n_✓-_✓h_✓e_✓l_✓p (M-h) prints a help file on
Cornell 6.03.00 20 November 1992 15
TCSH(1) TCSH(1)
the current command (using the same definition of current
as the completion routines use). This help file is found
by searching the path list HPATH for files of the form
foo.help, foo.1, foo.8, or foo.6 in that order (assuming
that the current command is foo). The file is just
printed, not paged in any way. This is because _✓r_✓u_✓n_✓-_✓h_✓e_✓l_✓p
is meant to be used to look up short help files, not man-
ual pages (although it can do manual pages also).
8✓8.✓. E✓EN✓NH✓HA✓AN✓NC✓CE✓ED✓D H✓HI✓IS✓ST✓TO✓OR✓RY✓Y M✓ME✓EC✓CH✓HA✓AN✓NI✓IS✓SM✓M
_✓T_✓c_✓s_✓h will save the history list between login sessions.
It does this by writing the current list to the file
"~/.history" on logout, and reading it in on login. For
example, placing the line
> set history=25 savehist=20
tells _✓t_✓c_✓s_✓h to save the last 25 commands on the history
list, and to save the last 20 of them between logins. The
"savehist" variable may be set up to the size of history,
although it is an error to have _✓s_✓a_✓v_✓e_✓h_✓i_✓s_✓t larger than _✓h_✓i_✓s_✓-
_✓t_✓o_✓r_✓y_✓. In addition to the above _✓t_✓c_✓s_✓h_✓, keeps unparsed (lit-
eral) versions of the history if the variable _✓h_✓i_✓s_✓t_✓l_✓i_✓t is
set. Also the toggle-history function toggles between the
parsed and literal version of the recalled history in the
editor buffer. For example:
> set histlit
> echo !:s/foo/bar; ls
Modifier failed.
> ^P
> echo !:s/foo/bar; ls
> unset histlit
> echo !:s/foo/bar; ls
Modifier failed.
> ^P
> echo unset histlit[M-r]
> echo !:s/foo/bar; ls
_✓T_✓c_✓s_✓h also supports the history escape _✓!_✓#_✓. This undocu-
mented _✓c_✓s_✓h escape holds the words of the current line.
This is useful in renaming commands:
> mv foo bar!#:1
mv foo barfoo
Care should be taken when using this history expansion in
_✓c_✓s_✓h since there is no check for recursion. In _✓t_✓c_✓s_✓h up to
10 levels of recursion are allowed.
Another difference between _✓t_✓c_✓s_✓h and _✓c_✓s_✓h history expansion,
is the treatment of history arguments. In _✓c_✓s_✓h _✓!_✓3_✓d expands
to event 3 with the letter "d" appended to it. There is
Cornell 6.03.00 20 November 1992 16
TCSH(1) TCSH(1)
no way to repeat a command that begins with a number using
the name of the command in the history escape. In _✓t_✓c_✓s_✓h
only numeric arguments are treated as event numbers;
therefore _✓!_✓3_✓d is interpreted as: repeat the last command
that started with the string "3d". To mimic the _✓c_✓s_✓h behav-
ior _✓!_✓3_✓\_✓d can be used.
9✓9.✓. A✓AU✓UT✓TO✓OM✓MA✓AT✓TI✓IC✓C L✓LO✓OG✓GO✓OU✓UT✓T/✓/L✓LO✓OC✓CK✓KI✓IN✓NG✓G
The automatic locking and logout time are controlled by
the variable _✓a_✓u_✓t_✓o_✓l_✓o_✓g_✓o_✓u_✓t_✓. The value of the first word is
the number of minutes of inactivity will be allowed before
automatically logging the user out. When that many min-
utes have been reached, the shell prints "auto-logout" and
dies (without executing ~/.logout). The default for _✓t_✓c_✓s_✓h
is to set _✓a_✓u_✓t_✓o_✓l_✓o_✓g_✓o_✓u_✓t for 60 minutes on login shells, and
when the user is root. To disable autologout (for
instance in a window system), unset the shell variable
_✓a_✓u_✓t_✓o_✓l_✓o_✓g_✓o_✓u_✓t_✓.
The value of the optional second word indicates the number
of minutes of inactivity after which the user will be
prompted for his login password to continue working. Fail-
ure to enter the correct password 5 times, results in
auto-logout.
1✓10✓0.✓. E✓EX✓XE✓EC✓CU✓UT✓TI✓IO✓ON✓N O✓OF✓F A✓A C✓CO✓OM✓MM✓MA✓AN✓ND✓D P✓PR✓RI✓IO✓OR✓R T✓TO✓O E✓EA✓AC✓CH✓H P✓PR✓RO✓OM✓MP✓PT✓T
_✓T_✓c_✓s_✓h supports a special alias, _✓p_✓r_✓e_✓c_✓m_✓d_✓, which if set holds
a command that will be executed before printing each
prompt. For example, if the user has done
> alias precmd date
then the program _✓d_✓a_✓t_✓e will be run just before the shell
prompts for each command. There are no limitations on
what precmd can be set to do, although discretion should
be used.
1✓11✓1.✓. P✓PE✓ER✓RI✓IO✓OD✓DI✓IC✓C C✓CO✓OM✓MM✓MA✓AN✓ND✓D E✓EX✓XE✓EC✓CU✓UT✓TI✓IO✓ON✓N
_✓T_✓c_✓s_✓h is now capable of providing periodic command execu-
tion through the use of the shell variable _✓t_✓p_✓e_✓r_✓i_✓o_✓d and the
alias _✓p_✓e_✓r_✓i_✓o_✓d_✓i_✓c_✓. When these items are set, the alias _✓p_✓e_✓r_✓i_✓-
_✓o_✓d_✓i_✓c will be executed every _✓t_✓p_✓e_✓r_✓i_✓o_✓d minutes. This pro-
vides a convenient means for checking on common but infre-
quent changes, such as new messages. Example:
> set tperiod = 30
> alias periodic checknews
This will cause the _✓c_✓h_✓e_✓c_✓k_✓n_✓e_✓w_✓s(1) program to be run every
30 minutes. Having the alias _✓p_✓e_✓r_✓i_✓o_✓d_✓i_✓c set but with an
Cornell 6.03.00 20 November 1992 17
TCSH(1) TCSH(1)
unset _✓t_✓p_✓e_✓r_✓i_✓o_✓d (or a value of 0 for _✓t_✓p_✓e_✓r_✓i_✓o_✓d_✓) will cause
_✓p_✓e_✓r_✓i_✓o_✓d_✓i_✓c to degenerate to another form of _✓p_✓r_✓e_✓c_✓m_✓d_✓.
1✓12✓2.✓. N✓NE✓EW✓W P✓PR✓RO✓OM✓MP✓PT✓T F✓FO✓OR✓RM✓MA✓AT✓T
The format for the _✓p_✓r_✓o_✓m_✓p_✓t shell variable has been changed
to include many new things, such as the current time of
day, current working directory, etc.. The new format uses
"%<char>" to signal an expansion, much like _✓p_✓r_✓i_✓n_✓t_✓f_✓(_✓3_✓S_✓)_✓.
The available sequences are:
%/ Current working directory.
%~ cwd. If it starts with $HOME, that part is
replaced by a ~. In addition if a directory
name prefix matches a user's home directory,
that part of the directory will be substituted
with ~user. NOTE: The ~user substitution will
only happen if the shell has performed a ~
expansion for that user name in this session.
%c or %. Trailing component of cwd, may be
followed by by a digit to get more than one
component, if it starts with $HOME, that
part is replaced with a ~.
%C Trailing component of cwd, may be followed
by a digit to get more than one component, no
~ substitution.
%h, %!, ! Current history event number.
%M The full machine hostname.
%m The hostname up to the first ".".
%S (%s) Start (stop) standout mode.
%B (%b) Start (stop) boldfacing mode. (Only if
tcsh was compiled to be eight bit clean.)
%U (%u) Start (stop) underline mode. (Only if
tcsh was compiled to be eight bit clean.)
%t or %@ Current time of day, in 12-hour, am/pm format.
%T Current time of day, in 24-hour format.
(But see the _✓a_✓m_✓p_✓m shell variable below.)
\c `c' is parsed the same way as in bindkey.
^c `c' is parsed the same way as in bindkey.
%% A single %.
%n The user name, contents of $user.
%d The weekday in <Day> format.
%D The day in dd format.
%w The month in <Mon> format.
%W The month in mm format.
%y The year in yy format.
%Y The year in yyyy format.
%l The line (tty) the user is logged on.
%L clear from prompt to end of display or end of line.
%# A `#' if tcsh is run as a root shell,
a `>' if not.
%{..%} Include string as a literal escape sequence.
Note that the enclosed escape sequence, should
only be used to change terminal attributes and
Cornell 6.03.00 20 November 1992 18
TCSH(1) TCSH(1)
should not move the cursor location. Also, this
cannot be the last character in the prompt
string. (Available only if tcsh was compiled to
be eight bit clean.)
%? return code of the last command executed just
before the prompt.
%R In prompt3 this is the corrected string; in
prompt2 it is the status of the parser.
On %C, %c and %., if the optional digit is 0, then then
next digit is interpreted as the number of directory com-
ponents to be skipped, and the number of components
skipped are reported as: /<num-skipped>path/path.
The sequences for standout are often used to indicate that
this is an enabled (running as root) shell. An example:
> set prompt="%m [%h] %U[%@]%u [%/] you rang? "
tut [37] _✓[_✓2_✓:_✓5_✓4_✓p_✓m_✓] [/usr/accts/sys] you rang? _
In addition, there is a new variable, _✓p_✓r_✓o_✓m_✓p_✓t_✓2_✓, which is
used to prompt for the body of while and for loops (wher-
ever normal _✓c_✓s_✓h prompts with a question mark). The
default for _✓p_✓r_✓o_✓m_✓p_✓t_✓2 is "%R? ": the status of the parser
followed by a question mark. This alternate prompt is
also used when the parser is waiting for more input; i.e.
when the previous line ended in a \. The _✓p_✓r_✓o_✓m_✓p_✓t_✓3 variable
is used when displaying the corrected command line when
automatic spelling correction is in effect; it defaults to
"CORRECT>%R (y|n|e)? ".
1✓13✓3.✓. T✓TI✓IM✓ME✓E-✓-S✓ST✓TA✓AM✓MP✓PE✓ED✓D H✓HI✓IS✓ST✓TO✓OR✓RY✓Y L✓LI✓IS✓ST✓T
The history list in _✓t_✓c_✓s_✓h now has a time-of-day stamp
attached to each history list event. This time stamp is
printed whenever the history command is executed. This
allows the user to keep track of when the various events
occurred. The time stamps are not maintained on the saved
history list (also available in _✓c_✓s_✓h); thus, on logging
back in, all the saved history events will be recorded
with the login time as their time stamp. The time stamp
printouts can be omitted from the history list by adding
the -t switch to the _✓h_✓i_✓s_✓t_✓o_✓r_✓y command. _✓T_✓c_✓s_✓h provides a way
to save, restore and clear the history list in a file.
_✓h_✓i_✓s_✓t_✓o_✓r_✓y _✓-_✓S _✓[_✓<_✓f_✓i_✓l_✓e_✓n_✓a_✓m_✓e_✓>_✓]
_✓h_✓i_✓s_✓t_✓o_✓r_✓y _✓-_✓L _✓[_✓<_✓f_✓i_✓l_✓e_✓n_✓a_✓m_✓e_✓>_✓]
_✓h_✓i_✓s_✓t_✓o_✓r_✓y _✓-_✓c
The 'S' flag saves the current history, the 'L' flags
loads the history, and the 'c' flag clears the history.
If a filename is not specified, then $HOME/.history is
used.
Cornell 6.03.00 20 November 1992 19
TCSH(1) TCSH(1)
1✓14✓4.✓. D✓DI✓IR✓RE✓EC✓CT✓TO✓OR✓RY✓Y A✓AC✓CC✓CE✓ES✓SS✓S
_✓T_✓c_✓s_✓h supports three new flags to control directory style
printing for cd, pushd, popd, and dirs:
_✓-_✓n Print entries in new lines so that the screen width is
not exceeded
_✓-_✓l Don't print but print the whole path
_✓-_✓v Print the stack entries one in each line, preceded by
the stack number.
Note that popd +n can be used to pop out stack entries of
directories that do not exist any more.
_✓T_✓c_✓s_✓h always saves the last directory visited. Changing to
the previous directory can be done by using _✓'_✓c_✓d _✓-_✓' or
_✓'_✓p_✓u_✓s_✓h_✓d _✓-_✓'_✓.
_✓T_✓c_✓s_✓h will now allow the user to access all elements in the
directory stack directly. The syntax "=<digit>" is recog-
nized by _✓t_✓c_✓s_✓h as indicating a particular directory in the
stack. (This works for the file/command name recognition
as well.) This syntax is analogous to the ~ syntax for
access to users' home directories. The stack is viewed as
zero-based, i.e., =0 is the same as $cwd, which is the
same as ".". As a special case, the string "=-" is recog-
nized as indicating the last directory in the stack.
Thus,
> dirs -v
0 /usr/net/bin
1 /usr/spool/uucp
2 /usr/accts/sys
> echo =2
/usr/accts/sys
> ls -l =1/LOGFILE
-rw-r--r-- 1 uucp 2594 Jan 19 09:09 /usr/spool/uucp/LOGFILE
> echo =-/.cs*
/usr/accts/sys/.cshrc
> echo =4
Not that many dir stack entries.
>
_✓T_✓c_✓s_✓h will complain if you ask for a directory stack item
which does not exist.
In the normal _✓c_✓s_✓h_✓, saying "pushd +2" would rotate the
entire stack around through 2 stack elements, placing the
entry found there at the top of the stack. If, however,
the new shell variable _✓d_✓e_✓x_✓t_✓r_✓a_✓c_✓t is set, then issuing
"pushd +n" will cause the nth directory stack element to
be extracted from its current position, which will then be
pushed onto the top of the stack. Example:
Cornell 6.03.00 20 November 1992 20
TCSH(1) TCSH(1)
> dirs
~ /usr/spool/uucp /usr/net/bin /sys/src
> set dextract
> pushd +2
/usr/net/bin ~ /usr/spool/uucp /sys/src
> unset dextract
> pushd +2
/usr/spool/uucp /sys/src /usr/net/bin ~
_✓T_✓c_✓s_✓h provides a way to save, restore and clear the direc-
tory stack in a file.
_✓d_✓i_✓r_✓s _✓-_✓S _✓[_✓<_✓f_✓i_✓l_✓e_✓n_✓a_✓m_✓e_✓>_✓]
_✓d_✓i_✓r_✓s _✓-_✓L _✓[_✓<_✓f_✓i_✓l_✓e_✓n_✓a_✓m_✓e_✓>_✓]
_✓d_✓i_✓r_✓s _✓-_✓c
The 'S' flag saves the current directory stack, the 'L'
flags loads the directory stack, and the 'c' flag clears
the directory stack. If a filename is not specified, then
$HOME/.cshdirs is used.
In addition, if the shell variable _✓d_✓u_✓n_✓i_✓q_✓u_✓e is set, only
directories that are not already in the directory stack
will be added when _✓p_✓u_✓s_✓h is invoked.
The way symbolic links that point to directories are
crossed is determined by the _✓s_✓y_✓m_✓l_✓i_✓n_✓k_✓s variable. By
default, it is not set to anything and symbolic links are
not treated specially. However, it can be set to either:
_✓c_✓h_✓a_✓s_✓e_✓, _✓i_✓g_✓n_✓o_✓r_✓e_✓, or _✓e_✓x_✓p_✓a_✓n_✓d_✓. If _✓s_✓y_✓m_✓l_✓i_✓n_✓k_✓s is set to _✓c_✓h_✓a_✓s_✓e_✓,
then every time the directory changes, _✓$_✓c_✓w_✓d reflects the
real directory name, and not the name through the link. A
notable exception is the user's home directory, but that
should be fixed. If _✓s_✓y_✓m_✓l_✓i_✓n_✓k_✓s is set to either _✓i_✓g_✓n_✓o_✓r_✓e or
_✓e_✓x_✓p_✓a_✓n_✓d_✓, then tcsh tries to determine the current directory
name relative to the name of the current directory before
the link was crossed. In simple terms, if you chdir
through a symbolic link and then cd .., you will end ..
relatively to where you were before you crossed the link
and not .. relatively to where the symbolic link points.
While _✓i_✓g_✓n_✓o_✓r_✓e affects only builtin commands and completion,
_✓e_✓x_✓p_✓a_✓n_✓d affects command execution too, by `fixing' argu-
ments that it considers to be path names. Unfortunately
this does not work in every case, specially when file
arguments are embedded in command line options. _✓E_✓x_✓p_✓a_✓n_✓d
also allows to specify the `real' (as opposed to the one
determined relatively to _✓$_✓c_✓w_✓d_✓)_✓, _✓b_✓y _✓q_✓u_✓o_✓t_✓i_✓n_✓g _✓t_✓h_✓e _✓f_✓i_✓l_✓e _✓a_✓r_✓g_✓u_✓-
_✓m_✓e_✓n_✓t_✓.
For example:
> cd /tmp
> mkdir from from/src to
> ln -s ../from/src to/dst
Cornell 6.03.00 20 November 1992 21
TCSH(1) TCSH(1)
> unset symlinks
> cd /tmp/to/dst; echo $cwd
/tmp/to/dst
> cd ..; echo $cwd
/tmp/from
> set symlinks=chase
> cd /tmp/to/dst; echo $cwd
/tmp/from/src
> cd ..; echo $cwd
/tmp/from
> set symlinks=ignore
> cd /tmp/to/dst; echo $cwd
/tmp/to/dst
> cd ..; echo $cwd
/tmp/to
> set symlinks=expand
> cd /tmp/to/dst; echo $cwd
/tmp/to/dst
> cd ..; echo $cwd # builtin
/tmp/to
> cd /tmp/to/dst; echo $cwd
/tmp/to/dst
> cd ".."; echo $cwd # quoted
/tmp/from
> /bin/echo .. # rewrites non builtin commands.
/tmp/to
> /bin/echo ".."
While the _✓e_✓x_✓p_✓a_✓n_✓d setting is the most convenient, and makes
symbolic links invisible, it can sometimes be misleading
and confusing in cases where it fails to recognize argu-
ments. A compromise is to use the _✓i_✓g_✓n_✓o_✓r_✓e setting and use
the editor functions "normalize-path", bound by default to
_✓^_✓X_✓n_✓.
1✓15✓5.✓. W✓WA✓AT✓TC✓CH✓HI✓IN✓NG✓G F✓FO✓OR✓R L✓LO✓OG✓GI✓IN✓NS✓S A✓AN✓ND✓D L✓LO✓OG✓GO✓OU✓UT✓TS✓S
_✓T_✓c_✓s_✓h has a mechanism so that the user can watch for login
and logout activity of any user or terminal in the system.
This is accomplished using the new special shell variable
_✓w_✓a_✓t_✓c_✓h_✓, which contains login/terminal pattern pairs to be
checked for activity. For example:
> set watch=(sys ttyjd root console)
This setting will allow the user to check on when the user
"sys" logs in on /dev/ttyjd. Similarly, it will inform
the user of root's activity on the console. In order to
be more general, the word "any" may be substituted for
either a user's or a terminal's name, thus allowing
Cornell 6.03.00 20 November 1992 22
TCSH(1) TCSH(1)
> set watch=('b*' any any ttyh0)
which will check for users that match the pattern 'b*'
logging in or out of the system on any terminal, as well
as anyone logging in to /dev/ttyh0. Naturally, the com-
pletely general case
> set watch=(any any)
allows the user to check on any and all login/logout
activity in the the system.
By default, the interval between checks of users on the
system is 10 minutes; this can be changed by making the
first element of _✓w_✓a_✓t_✓c_✓h a number of minutes which should be
used instead, as in
> set watch=(40 any any)
which will check for any users logging in or out every 40
minutes.
There is also a new command, _✓l_✓o_✓g_✓, which is used to cause
_✓t_✓c_✓s_✓h to inform the user of all users/terminals affected by
_✓w_✓a_✓t_✓c_✓h whether they have been announced before or not.
This is useful if a user has been on for some time and
cannot remember if a particular person/terminal is online
right now or not. _✓L_✓o_✓g will reset all indication of previ-
ous announcement and give the user the login list all over
again, as well as printing the current value of _✓w_✓a_✓t_✓c_✓h_✓.
The first time that _✓w_✓a_✓t_✓c_✓h is set at _✓t_✓c_✓s_✓h startup, all
affected users and terminals will be printed as though
those users/terminals had just logged on. This may appear
to be a bug, but is generally considered a feature, since
it allows the user to see who is on when he first logs in.
The format of the printouts can be tailored via setting of
the variable _✓w_✓h_✓o_✓. In addition to the standard prompt %
escapes, the following sequences are available for the
format specification:
%n The name of the user that logged in/out.
%a The observed action, i.e. "logged on",
"logged off", or "replaced <olduser> on".
%l The line (tty) the user is logged on.
%M The full hostname of the remote host ("local"
if non-remote).
%m The hostname up to the first ".". If only
the ip address is available or the utmp
field contains the name of an x-windows
display, the whole name is printed.
The %M and %m sequences are only available on systems that
Cornell 6.03.00 20 November 1992 23
TCSH(1) TCSH(1)
store the remote hostname in /etc/utmp. If _✓w_✓h_✓o is not set,
the format defaults to "%n has %a %l from %m.", or "%n has
%a %l." on systems that don't store the hostname.
1✓16✓6.✓. T✓TI✓IM✓ME✓ED✓D E✓EV✓VE✓EN✓NT✓T L✓LI✓IS✓ST✓T
_✓T_✓c_✓s_✓h now supports a scheduled-event list through the use
of the command _✓s_✓c_✓h_✓e_✓d_✓. This command gives the user a mech-
anism by which to arrange for other commands to be exe-
cuted at given times. An event is added to the scheduled-
event list by saying
> sched [+]hh:mm <command>
as in
> sched 11:00 echo It\'s eleven o\'clock.
This will make an entry in the list at 11am for the echo
command to be run with the given arguments. The time may
be specified in either absolute or relative time, and
absolute times may have a morning/afternoon specification
as well, using "am" or "pm." For example,
> sched +2:15 /usr/lib/uucp/uucico -r1 -sother
> sched 5pm set prompt='[%h] It\'s after 5; go home: >'
> sched +3am echo This syntax doesn\'t work.
Relative time inconsistent with am/pm.
>
Note that _✓t_✓c_✓s_✓h will complain if you try to make faulty
time specifications.
Printing the current time-event list is accomplished by
giving the _✓s_✓c_✓h_✓e_✓d command with no arguments:
> sched
1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother
2 Wed Apr 4 17:00 set prompt=[%h] It's after 5; go home: >
>
There is also a mechanism by which the user can remove an
item from the list:
> sched --3
Usage for delete: sched -<item#>.
> sched -3
Not that many scheduled events.
> sched -2
> sched
1 Wed Apr 4 15:42 /usr/lib/uucp/uucico -r1 -sother
>
All commands specified on the scheduled-event list will be
Cornell 6.03.00 20 November 1992 24
TCSH(1) TCSH(1)
executed just prior to printing the first prompt immedi-
ately following the time when the command is to be run.
Hence, it is possible to miss the exact time when the com-
mand is to be run, but _✓t_✓c_✓s_✓h will definitely get around to
all commands which are overdue at its next prompt. Sched-
uled-event list items which come due while _✓t_✓c_✓s_✓h is waiting
for user input will be executed immediately. In no case,
however, will normal operation of already-running commands
be interrupted so that a scheduled-event list element may
be run.
This mechanism is similar to, but not the same as, the
_✓a_✓t(1) command on some Unix systems. Its major disadvan-
tage is that it does not necessarily run a command at
exactly the specified time (but only if another command is
already being run). Its major advantage is that commands
which run directly from _✓t_✓c_✓s_✓h_✓, as sched commands are, have
access to shell variables and other structures. This pro-
vides a mechanism for changing one's working environment
based on the time of day.
1✓17✓7.✓. B✓BU✓UI✓IL✓LT✓TI✓IN✓N F✓FO✓OR✓R l✓ls✓s -✓-F✓F
There is a new builtin command called _✓l_✓s_✓-_✓F which does the
same thing as the command "ls -F". If the shell variable
_✓s_✓h_✓o_✓w_✓d_✓o_✓t_✓s has been set, it acts like "ls -aF". If _✓s_✓h_✓o_✓w_✓d_✓o_✓t_✓s
is equal to "-A", then _✓l_✓s_✓-_✓F acts like "ls -AF". Ls-F works
like ls, only it is generally faster, since it does not
need to fork and exec, and safer against Trojan horses if
the user has `.' in the execution path. If other switches
are passed to _✓l_✓s_✓-_✓F_✓, then the normal ls is executed. Alias-
ing ls to ls-F provides a fast alternative way of listing
files. Note that on non BSD machines, where ls -C is not
the default, _✓l_✓s_✓-_✓F_✓, behaves like ls -CF.
_✓l_✓s_✓-_✓F appends the following characters depending on the
file type:
= File is an AF_UNIX domain socket.
[if system supports sockets]
| File is a named pipe (fifo)
[if system supports named pipes]
% File is a character device
# File is a block device
/ File is a directory
* File is executable
+ File is a hidden directory [aix]
or context dependent [hpux]
: File is network special [hpux]
On systems that support symbolic links the variable
_✓l_✓i_✓s_✓t_✓l_✓i_✓n_✓k_✓s controls the way symbolic links are identified.
If _✓l_✓i_✓s_✓t_✓l_✓i_✓n_✓k_✓s is not set then the character '@' is appended
to the file. If _✓l_✓i_✓s_✓t_✓l_✓i_✓n_✓k_✓s is set then the following
Cornell 6.03.00 20 November 1992 25
TCSH(1) TCSH(1)
characters are appended to the filename depending on the
type of file the symbolic links points to:
@ File is a symbolic link pointing
to a non-directory
> File is a symbolic link pointing
to a directory
& File is a symbolic link pointing
to nowhere
While setting _✓l_✓i_✓s_✓t_✓l_✓i_✓n_✓k_✓s can be helpful while navigating
around the file system, it slows down _✓l_✓s_✓-_✓F and it causes
mounting of file systems if the symbolic links point to an
NFS auto-mounted partition.
1✓18✓8.✓. G✓GL✓LO✓OB✓BB✓BI✓IN✓NG✓G S✓SY✓YN✓NT✓TA✓AX✓X A✓AD✓DD✓DI✓IT✓TI✓IO✓ON✓NS✓S
The syntax for any character in a range (for example ".[a-
z]*") has been extended so as to conform with standard
Unix regular expression syntax (see _✓e_✓d(1)). Specifically,
after an open bracket ("["), if the first character is a
caret ("^") then the character matched will be any not in
the range specified. For example:
> cd ~
> echo .[a-z]*
.cshrc .emacs .login .logout .menuwmrc
> echo .[^.]*
.Xdefaults .Xinit .cshrc .emacs .login .logout .menuwmrc
>
Note that the second form includes .Xdefaults and .Xinit
because 'X' (and all the lower case letters) are outside
of the range of a single '.'.
Also the ability to negate a globbing pattern has been
added:
> echo *
foo foobar bar barfoo
> echo ^foo*
bar barfoo
Note that this does not work correctly if the expression
does not have any wildcard characters (?*[]) or if the
expression has braces {}.
1✓19✓9.✓. N✓NE✓EW✓W E✓EN✓NV✓VI✓IR✓RO✓ON✓NM✓ME✓EN✓NT✓T A✓AN✓ND✓D S✓SH✓HE✓EL✓LL✓L V✓VA✓AR✓RI✓IA✓AB✓BL✓LE✓ES✓S
On startup, _✓t_✓c_✓s_✓h now automatically initializes the envi-
ronment variable _✓H_✓O_✓S_✓T to the name of the machine that it
is running on. It does this by doing a _✓g_✓e_✓t_✓h_✓o_✓s_✓t_✓n_✓a_✓m_✓e(2)
system call, and setting _✓H_✓O_✓S_✓T to the result.
Cornell 6.03.00 20 November 1992 26
TCSH(1) TCSH(1)
_✓T_✓c_✓s_✓h also initializes the environment variable _✓H_✓O_✓S_✓T_✓T_✓Y_✓P_✓E to
a symbolic name for the type of computer that it is run-
ning on. This is useful when sharing a single physical
directory between several types of machines (running NFS,
for instance). For example, if the following is in
_✓._✓l_✓o_✓g_✓i_✓n_✓:
set path = (~/bin.$HOSTTYPE /usr/ucb /bin /usr/bin
/usr/games .)
and the user has directories named "bin._✓m_✓a_✓c_✓h_✓i_✓n_✓e" (where
_✓m_✓a_✓c_✓h_✓i_✓n_✓e is a name from the list below), then the user can
have the same programs compiled for different machines in
the appropriate "bin._✓m_✓a_✓c_✓h_✓i_✓n_✓e" directories and _✓t_✓c_✓s_✓h will
run the binary for the correct machine.
The current possible values are:
_✓3_✓8_✓6_✓B_✓S_✓D an Intel 386, running 386BSD
_✓a_✓i_✓x_✓3_✓7_✓0 an IBM 370, running aix
_✓a_✓i_✓x_✓E_✓S_✓A an IBM ESA, running aix
_✓a_✓l_✓l_✓i_✓a_✓n_✓t an Alliant FX series
_✓a_✓l_✓l_✓i_✓a_✓n_✓t_✓-_✓f_✓x_✓8_✓0 an Alliant FX80 (mc68000 based)
_✓a_✓l_✓l_✓i_✓a_✓n_✓t_✓-_✓f_✓x_✓2_✓8_✓0_✓0 an Alliant FX2800 (i860 based)
_✓a_✓l_✓p_✓h_✓a an DEC Alpha running OSF/1
_✓a_✓m_✓d_✓a_✓h_✓l an Amdahl running uts 2.1
_✓a_✓m_✓i_✓g_✓a an amiga running amix 2.02
_✓a_✓p_✓o_✓l_✓l_✓o an Apollo running DomainOS
_✓a_✓t_✓t_✓3_✓b_✓1_✓5 an AT&T 3b15
_✓a_✓t_✓t_✓3_✓b_✓2 an AT&T 3b2
_✓a_✓t_✓t_✓3_✓b_✓2_✓0 an AT&T 3b20
_✓a_✓t_✓t_✓3_✓b_✓5 an AT&T 3b5
_✓b_✓a_✓l_✓a_✓n_✓c_✓e a Sequent Balance (32000 based)
_✓b_✓s_✓d_✓3_✓8_✓6 an Intel 386, running BSDI's bsd386
_✓b_✓u_✓t_✓t_✓e_✓r_✓f_✓l_✓y a BBN Computer Butterfly 1000
_✓c_✓o_✓h_✓3_✓8_✓6 a 386 running Coherent 4.0
_✓c_✓o_✓h_✓e_✓r_✓e_✓n_✓t an unknown machine running Coherent
_✓c_✓o_✓n_✓v_✓e_✓x a Convex
_✓c_✓r_✓a_✓y a Cray running Unicos
_✓d_✓e_✓c_✓s_✓t_✓a_✓t_✓i_✓o_✓n a DecStation XXXX
_✓e_✓t_✓a_✓1_✓0 an ETA 10 running SVR3
_✓g_✓o_✓u_✓l_✓d_✓-_✓n_✓p_✓1 a Gould NP1
_✓h_✓k_✓6_✓8 a Heurikon HK68 running Uniplus+ 5.0
_✓h_✓p_✓3_✓0_✓0 an HP 9000, series 300, running mtXinu
_✓h_✓p_✓8_✓0_✓0 an HP 9000, series 800, running mtXinu
_✓h_✓p_✓9_✓0_✓0_✓0_✓s_✓3_✓0_✓0 an HP 9000, series 300, running hpux
_✓h_✓p_✓9_✓0_✓0_✓0_✓s_✓5_✓0_✓0 an HP 9000, series 500, running hpux
_✓h_✓p_✓9_✓0_✓0_✓0_✓s_✓7_✓0_✓0 an HP 9000, series 700, running hpux
_✓h_✓p_✓9_✓0_✓0_✓0_✓s_✓8_✓0_✓0 an HP 9000, series 800, running hpux
_✓h_✓p an HP, running hpux
_✓i_✓3_✓8_✓6 an Intel 386, generic
_✓i_✓3_✓8_✓6_✓-_✓m_✓a_✓c_✓h an Intel 386, running mach
_✓i_✓3_✓8_✓6_✓-_✓l_✓i_✓n_✓u_✓x an Intel 386, running Linux
_✓i_✓3_✓8_✓6_✓-_✓e_✓m_✓x an Intel 386, running emx [unix emulation under OS/2]
Cornell 6.03.00 20 November 1992 27
TCSH(1) TCSH(1)
_✓i_✓n_✓t_✓e_✓l_✓3_✓8_✓6 an Intel 386, running INTEL's SVR3
_✓i_✓r_✓i_✓s_✓3_✓d a Silicon Graphics Iris 3000
_✓i_✓r_✓i_✓s_✓4_✓d a Silicon Graphics Iris 4D
_✓i_✓s_✓c_✓3_✓8_✓6 an Intel 386, running ISC
_✓m_✓8_✓8_✓k an mc88000 CPU machine
_✓m_✓a_✓c_✓2 an Apple Computer Macintosh II, running AUX
_✓m_✓a_✓s_✓s_✓c_✓o_✓m_✓p a Concurrent (Masscomp), running RTU
_✓m_✓i_✓n_✓i_✓x_✓3_✓8_✓6 an i386 running minix
_✓m_✓i_✓n_✓i_✓x a mac or an amiga running minix
_✓m_✓i_✓p_✓s another mips CPU
_✓m_✓u_✓l_✓t_✓i_✓m_✓a_✓x an Encore Computer Corp. Multimax (32000 based)
_✓n_✓e_✓w_✓s a Sony NEWS 800 or 1700 workstation
_✓n_✓e_✓w_✓s_✓__✓m_✓i_✓p_✓s a NeWS machine with mips CPU
_✓n_✓d_✓5_✓0_✓0 a Norsk Data ND 500/5000 running Ndix
_✓n_✓s_✓3_✓2_✓0_✓0_✓0 an NS32000 CPU machine
_✓n_✓e_✓x_✓t a NeXT computer
_✓p_✓f_✓a_✓5_✓0 a PFU/Fujitsu A-xx computer
_✓p_✓s_✓2 an IBM PS/2, running aix
_✓p_✓t_✓x a Sequent Symmetry running DYNIX/ptx (386/486 based)
_✓p_✓y_✓r_✓a_✓m_✓i_✓d a Pyramid Technology computer (of any flavor)
_✓r_✓s_✓6_✓0_✓0_✓0 an IBM RS6000, running aix
_✓r_✓t an IBM PC/RT, running BSD (AOS 4.3) or mach
_✓r_✓t_✓p_✓c an IBM PC/RT, running aix
_✓s_✓c_✓o_✓3_✓8_✓6 an Intel 386, running SCO
_✓s_✓t_✓e_✓l_✓l_✓a_✓r a stellar running stellix
_✓s_✓u_✓n a Sun workstation of none of the above types
_✓s_✓u_✓n_✓2 a Sun Microsystems series 2 workstation (68010 based)
_✓s_✓u_✓n_✓3 a Sun Microsystems series 3 workstation (68020 based)
_✓s_✓u_✓n_✓3_✓8_✓6_✓i a Sun Microsystems 386i workstation (386 based)
_✓s_✓u_✓n_✓4 a Sun Microsystems series 4 workstation (SPARC based)
_✓s_✓y_✓m_✓m_✓e_✓t_✓r_✓y a Sequent Symmetry running DYNIX 3 (386/486 based)
_✓s_✓y_✓s_✓V_✓8_✓8 a Motorola MPC running System V/88 R32V2 (SVR3/88100 based)
_✓t_✓a_✓h_✓o_✓e a tahoe running 4BSD
_✓t_✓e_✓k_✓4_✓3_✓0_✓0 a Tektronix 4300 running UTek (BSD 4.2 / 68020 based)
_✓t_✓e_✓k_✓X_✓D_✓8_✓8 a Tektronix XD88/10 running UTekV 3.2e (SVR3/88100 based)
_✓t_✓i_✓t_✓a_✓n an Stardent Titan
_✓u_✓n_✓i_✓x_✓p_✓c an UNIX/PC running SVR1 att7300 aka att3b1
_✓v_✓a_✓x a Digital Equipment Corp. Vax (of any flavor)
_✓v_✓i_✓s_✓t_✓r_✓a_✓8_✓0_✓0 a Stardent Vistra 800 running SVR4
_✓V_✓M_✓S_✓-_✓P_✓O_✓S_✓I_✓X a vax? running VMS/POSIX
(The names of the machines are usually trade marks of the
corresponding companies.)
_✓T_✓c_✓s_✓h also initializes the shell variables _✓u_✓i_✓d and _✓g_✓i_✓d to
the value of the current real user ID/GID. This is useful
for telling what user/group the shell is running as. Under
Domain/OS _✓t_✓c_✓s_✓h will also set _✓o_✓i_✓d indicating the current
real organization id.
2✓20✓0.✓. C✓CO✓OM✓MM✓MA✓AN✓ND✓DS✓S F✓FO✓OR✓R D✓DE✓EB✓BU✓UG✓GG✓GI✓IN✓NG✓G
Only two such commands are available at this point, both
concerned with testing termcap entries.
Cornell 6.03.00 20 November 1992 28
TCSH(1) TCSH(1)
_✓t_✓e_✓l_✓l_✓t_✓c tells you, politely, what _✓t_✓c_✓s_✓h thinks of your ter-
minal, and _✓s_✓e_✓t_✓t_✓c `cap' `value' tells _✓t_✓c_✓s_✓h to believe that
the termcap capability `cap' ( as defined in _✓t_✓e_✓r_✓m_✓c_✓a_✓p(5) )
has the value `value'. No checking for sanity is per-
formed, so beware of improper use.
Note that Concept terminal users may have to "settc xn no"
to get proper wrapping at the rightmost column.
2✓21✓1.✓. S✓SE✓EA✓AR✓RC✓CH✓HI✓IN✓NG✓G F✓FO✓OR✓R T✓TH✓HE✓E V✓VI✓IS✓SU✓UA✓AL✓L H✓HI✓IS✓ST✓TO✓OR✓RY✓Y
Four new editor functions have been added in emacs mode:
Two of them, history-search-backward, bound to M-p (and M-
P), and history-search-forward, bound to M-n (and M-N),
implement a conventional search mechanism, while the other
two, i-search-back and i-search-fwd, both unbound by
default, implement the emacs-style incremental search.
History-search-backward (history-search-forward) searches
backward (forward) through the history list for previous
(next) occurrence of the beginning of the input buffer as
a command. That is, if the user types:
> echo foo
foo
> ls
filea fileb
> echo bar
bar
>
and then types "echo<ESC>p", the shell will place "echo
bar" in the editing buffer. If another _✓M_✓-_✓p was entered,
the editing buffer would change to "echo foo". This capa-
bility is compatible with the plain visual history; if the
user were to then enter _✓^_✓P the editing buffer would be
changed to "ls". The pattern used to search through the
history is defined by the characters from the beginning of
the line up to the current cursor position and may contain
a shell globbing pattern. Successive history searches use
the same pattern.
When the incremental search functions are used, a prompt -
"bck:" or "fwd:", depending on the chosen direction -
appears, and characters typed are appended to the search
pattern. The matching command line is placed in the edit-
ing buffer, with the cursor positioned at the point where
the pattern was found (the incremental search will also do
searching within a command line). If the search fails,
the terminal bell is rung, and the ':' in the prompt is
changed to '?'.
If these functions are bound to single characters, and one
of those is typed again during the incremental search, the
Cornell 6.03.00 20 November 1992 29
TCSH(1) TCSH(1)
search continues in the corresponding direction, with the
pattern unchanged; if the previous search failed, this
will also cause it to "wrap around" the history list.
Finally, the following characters also have a special
meaning during the search:
Delete (or any character bound to _✓b_✓a_✓c_✓k_✓w_✓a_✓r_✓d_✓-_✓d_✓e_✓l_✓e_✓t_✓e_✓-_✓c_✓h_✓a_✓r)
Undo the effect of the last character typed,
deleting a character from the pattern if appropriate.
^G Abort the search, back to the last successful one
if previous search failed, otherwise entire search.
^W Append the rest of the current word to the pattern.
ESC Terminate the search, leaving current line in buffer.
Any other character, that isn't bound to _✓s_✓e_✓l_✓f_✓-_✓i_✓n_✓s_✓e_✓r_✓t_✓-
_✓c_✓o_✓m_✓m_✓a_✓n_✓d_✓, terminates the search, leaving the current com-
mand line in the editing buffer, after which _✓t_✓c_✓s_✓h inter-
prets the character as if it was normal input - notably
_✓R_✓e_✓t_✓u_✓r_✓n will cause the current command line to be executed.
In vi mode "vi-search-fwd" (bound to '/') and "vi-search-
back" (bound to '?') can be used to search the visual
history. In command mode '/' or '?' followed by a shell
pattern, searches the visual history for the pattern. The
pattern can be terminated either with a _✓R_✓e_✓t_✓u_✓r_✓n_✓, in which
case the matched history event is placed in the command
buffer or an _✓E_✓s_✓c_✓a_✓p_✓e_✓, in which case the matched history
event is executed. If no history event matches the shell
pattern then the bell is rung.
2✓22✓2.✓. B✓BU✓UI✓IL✓LT✓TI✓IN✓N W✓WH✓HI✓IC✓CH✓H(✓(1✓1)✓)/✓/W✓WH✓HE✓ER✓RE✓E C✓CO✓OM✓MM✓MA✓AN✓ND✓DS✓S
There is now a builtin version of the _✓w_✓h_✓i_✓c_✓h(1) command.
The builtin version is just like the original, except that
it correctly reports aliases peculiar to this _✓t_✓c_✓s_✓h_✓, and
builtin commands. The only other difference is that the
builtin runs somewhere between 10 and 100 times faster.
There is also a key-function interface to this command:
the _✓w_✓h_✓i_✓c_✓h_✓-_✓c_✓o_✓m_✓m_✓a_✓n_✓d function (normally bound to M-?), can be
used anywhere on the command line, and will in effect do a
'which' on the command name.
Similarly where will report all known instances of the
command: aliases, builtins, as well as all references in
the path.
2✓23✓3.✓. R✓RE✓ES✓ST✓TA✓AR✓RT✓TI✓IN✓NG✓G A✓A S✓ST✓TO✓OP✓PP✓PE✓ED✓D E✓ED✓DI✓IT✓TO✓OR✓R
There is another new editor function: run-fg-editor, which
is bound to _✓M_✓-_✓^_✓Z. When typed, it saves away the current
input buffer, and looks for a stopped job with a name
equal to the file name part (last element) of either the
EDITOR or VISUAL environment variables (if not defined,
the default names are "ed" and "vi" respectively). If
Cornell 6.03.00 20 November 1992 30
TCSH(1) TCSH(1)
such a job is found, then it is restarted as if "fg %_✓n_✓a_✓m_✓e"
had been typed. This is used to toggle back and forth
between an editor and the shell easily. Some people bind
this function to _✓^_✓Z so they can do this even more easily.
2✓24✓4.✓. S✓ST✓TA✓AT✓TU✓US✓S L✓LI✓IN✓NE✓E S✓SU✓UP✓PP✓PO✓OR✓RT✓T
_✓T_✓c_✓s_✓h has a new builtin called _✓e_✓c_✓h_✓o_✓t_✓c that allows the user
to access the terminal capabilities from the command line,
similar to the system V _✓t_✓p_✓u_✓t(1).
> echotc home
Places the cursor at the home position and
> echotc cm 3 10
places the cursor at column 3 row 10. This command
replaces the _✓e_✓l and _✓s_✓l variables that used contain the
escape sequences to begin and end status line changes. The
command:
> echo $sl this is a test $el
is replaced by:
> echotc ts 0; echo "this is a test"; echotc fs
In addition _✓e_✓c_✓h_✓o_✓t_✓c understands the arguments _✓b_✓a_✓u_✓d_✓, _✓l_✓i_✓n_✓e_✓s_✓,
_✓c_✓o_✓l_✓s_✓, _✓m_✓e_✓t_✓a_✓, and _✓t_✓a_✓b_✓s And prints the baud rate, the number
of lines and columns, and "yes" or "no" depending if the
terminal has tabs or a meta key. This can be useful in
determining how terse the output of commands will be
depending on the baud rate, or setting limits to commands
like history to the highest number so that the terminal
does not scroll:
> set history=`echotc lines`
> @ history--
Note: Termcap strings may contain wildcard characters, and
echoing them will not work correctly. The suggested method
of setting shell variables to terminal capability strings
is using double quotes, as in the following example that
places the date in the status line:
> set tosl="`echotc ts 0`"
> set frsl="`echotc fs`"
> echo -n "$tosl";date; echo -n "$frsl"
_✓E_✓c_✓h_✓o_✓t_✓c accepts two flags. The flag _✓-_✓v enables verbose mes-
sages and the flag _✓-_✓s ignores any errors and returns the
empty string if the capability is not found.
Cornell 6.03.00 20 November 1992 31
TCSH(1) TCSH(1)
2✓25✓5.✓. E✓EX✓XE✓EC✓CU✓UT✓TI✓IO✓ON✓N O✓OF✓F A✓A C✓CO✓OM✓MM✓MA✓AN✓ND✓D A✓AF✓FT✓TE✓ER✓R C✓CH✓HA✓AN✓NG✓GI✓IN✓NG✓G T✓TH✓HE✓E C✓CU✓UR✓RR✓RE✓EN✓NT✓T W✓WO✓OR✓RK✓KI✓IN✓NG✓G
D✓DI✓IR✓RE✓EC✓CT✓TO✓OR✓RY✓Y
_✓T_✓c_✓s_✓h now supports a special alias, _✓c_✓w_✓d_✓c_✓m_✓d_✓, which if set
holds a command that will be executed after changing the
value of $cwd. For example, if the user is running on an
X window system _✓x_✓t_✓e_✓r_✓m_✓(_✓1_✓)_✓, and a re-parenting window man-
ager that supports title bars such as _✓t_✓w_✓m_✓(_✓1_✓) _✓a_✓n_✓d _✓h_✓a_✓s _✓d_✓o_✓n_✓e_✓:
> alias cwdcmd 'echo -n "^[]2;${HOST}:$cwd ^G"'
then the shell will change the title of the running
_✓x_✓t_✓e_✓r_✓m_✓(_✓1_✓) to be the name of the host, a colon, and the full
current working directory. A more fancy way to do that
is:
> alias cwdcmd 'echo -n
"^[]2;${HOST}:$cwd^G^[]1;${HOST}^G"'
This will put the hostname and working directory on the
title bar but only the hostname in the icon manager menu.
Note that if a user defines _✓c_✓w_✓d_✓c_✓m_✓d to contain a _✓c_✓d_✓, _✓p_✓u_✓s_✓h_✓d_✓,
or _✓p_✓o_✓p_✓d_✓, command, an infinite loop may result. In this
case, it is the author's opinion that said user will get
what he deserves.
2✓26✓6.✓. N✓NA✓AT✓TI✓IV✓VE✓E L✓LA✓AN✓NG✓GU✓UA✓AG✓GE✓E S✓SY✓YS✓ST✓TE✓EM✓M
_✓T_✓c_✓s_✓h is eight bit clean (if so compiled, see the descrip-
tion of the _✓v_✓e_✓r_✓s_✓i_✓o_✓n shell variable below), and will thus
support character sets needing this capability. The _✓t_✓c_✓s_✓h
support for NLS differs depending on whether it was com-
piled to use the system's NLS (again, see the _✓v_✓e_✓r_✓s_✓i_✓o_✓n
variable) or not. In either case, the default for charac-
ter classification (i.e. which characters are printable
etc) and sorting is 7-bit ascii, and any setting or unset-
ting of the LANG or LC_CTYPE environment variables will
cause a check for possible changes in these respects.
When using the system's NLS, the _✓s_✓e_✓t_✓l_✓o_✓c_✓a_✓l_✓e C library func-
tion will be called to determine appropriate character
classification and sorting - this function will typically
examine the LANG and LC_CTYPE variables for this purpose
(refer to the system documentation for further details).
Otherwise, NLS will be simulated, by assuming that the ISO
8859-1 character set is used whenever either of the LANG
and LC_CTYPE variables are set, regardless of their val-
ues. Sorting is not affected for the simulated NLS.
In addition, with both real and simulated NLS, all print-
able characters in the range \200-\377, i.e. those that
have M-<char> bindings, are automatically rebound to _✓s_✓e_✓l_✓f_✓-
_✓i_✓n_✓s_✓e_✓r_✓t_✓-_✓c_✓o_✓m_✓m_✓a_✓n_✓d (the corresponding binding for the
escape+<char> sequence, if any, is left alone). This
automatic rebinding is inhibited if the NOREBIND
Cornell 6.03.00 20 November 1992 32
TCSH(1) TCSH(1)
environment variable is set - this may be useful for the
simulated NLS, or a primitive real NLS which assumes full
ISO 8859-1 (otherwise all M-<char> bindings in the range
\240-\377 will effectively be undone in these cases).
Explicitly rebinding the relevant keys, using _✓b_✓i_✓n_✓d_✓k_✓e_✓y_✓, is
of course still possible.
Unknown characters (i.e. those that are neither printable
nor control characters) will be printed using the \nnn
format. If the tty is not in 8 bit mode, other 8 bit
characters will be printed by converting them to ascii and
using standout mode. _✓T_✓c_✓s_✓h will never change the 7/8 bit
mode of the tty, and will track user-initiated settings
for this - i.e. it may be necessary for NLS users (or, for
that matter, those that want to use a Meta key) to explic-
itly set the tty in 8 bit mode through the appropriate
_✓s_✓t_✓t_✓y(1) command in e.g. the .login file.
2✓27✓7.✓. A✓AU✓UT✓TO✓OM✓MA✓AT✓TI✓IC✓C P✓PR✓RO✓OC✓CE✓ES✓SS✓S T✓TI✓IM✓ME✓E R✓RE✓EP✓PO✓OR✓RT✓TI✓IN✓NG✓G
Automatic process time reporting is a feature that exists
in _✓c_✓s_✓h_✓, but it is usually not documented. In addition _✓t_✓c_✓s_✓h
provides a slightly enriched syntax. Process time reports
are controlled via the _✓t_✓i_✓m_✓e shell variable. The first
word of the _✓t_✓i_✓m_✓e variable indicates the minimum number of
CPU seconds the process has to consume before a time
report is produced. The optional second word controls the
format of the report. The following sequences are avail-
able for the format specification:
%U The time the process spent in user mode
in cpu seconds.
%S The time the process spent in kernel mode
in cpu seconds.
%E The elapsed time in seconds.
%P The CPU percentage computed as (%U + %S) / %E.
The following sequences are supported only in systems that
have the BSD resource limit functions.
%W Number of times the process was swapped.
%X The average amount in (shared) text space used
in Kbytes.
%D The average amount in (unshared) data/stack
space used in Kbytes.
%K The total space used (%X + %D) in Kbytes.
%M The maximum memory the process had in use at
any time in Kbytes.
%F The number of major page faults (page needed to
be brought from disk).
%R The number of minor page faults.
%I The number of input operations.
%O The number of output operations.
%r The number of socket messages received.
Cornell 6.03.00 20 November 1992 33
TCSH(1) TCSH(1)
%s The number of socket messages sent.
%k The number of signals received.
%w Number of voluntary context switches (waits).
%c Number of involuntary context switches.
The default time format is "%Uu %Ss %E %P %X+%Dk %I+%Oio
%Fpf+%Ww" for systems that support resource usage report-
ing and "%Uu %Ss %E %P" for systems that do not.
For Sequent's DYNIX/ptx %X, %D, %K, %r and %s are not sup-
ported. However, the following additional sequences are
available.
%Y The number of system calls performed.
%Z The number of pages which are zero-filled
on demand.
%i The number of times a process' resident
set size was increased by the kernel.
%d The number of times a process' resident
set size was decreased by the kernel.
%l The number of read system calls performed.
%m The number of write system calls performed.
%p the number of reads from raw disk devices.
%q the number of writes to raw disk devices.
The default time format for Sequent's DYNIX/ptx is "%Uu
%Ss $E %P %I+%Oio %Fpf+%Ww". Also note that the CPU per-
centage can be higher than 100% on multi-processors.
2✓28✓8.✓. O✓OS✓S/✓/D✓DE✓EP✓PE✓EN✓ND✓DE✓EN✓NT✓T B✓BU✓UI✓IL✓LT✓TI✓IN✓N S✓SU✓UP✓PP✓PO✓OR✓RT✓T
_✓T_✓R_✓A_✓N_✓S_✓P_✓A_✓R_✓E_✓N_✓T _✓C_✓O_✓M_✓P_✓U_✓T_✓I_✓N_✓G _✓F_✓A_✓C_✓I_✓L_✓I_✓T_✓Y
On systems that support TCF (aix-ibm370, aix-ps2) the fol-
lowing builtins have been added:
g✓ge✓et✓ts✓sp✓pa✓at✓th✓h Print the current system execution path.
s✓se✓et✓ts✓sp✓pa✓at✓th✓h L✓LO✓OC✓CA✓AL✓L|✓|<✓<s✓si✓it✓te✓e>✓>|✓|<✓<c✓cp✓pu✓u>✓> .✓..✓..✓.
Set the current execution path.
g✓ge✓et✓tx✓xv✓ve✓er✓rs✓s Print the current experimental version prefix.
s✓se✓et✓tx✓xv✓ve✓er✓rs✓s [✓[<✓<s✓st✓tr✓ri✓in✓ng✓g>✓>]✓]
If the optional string is ommited, any experi-
mental version prefix is removed. Otherwise the
experimental version prefix is set to string.
m✓mi✓ig✓gr✓ra✓at✓te✓e [✓[-✓-<✓<s✓si✓it✓te✓e>✓>]✓] <✓<p✓pi✓id✓d>✓>|✓|%✓%<✓<j✓jo✓ob✓bi✓id✓d>✓> .✓..✓..✓.
m✓mi✓ig✓gr✓ra✓at✓te✓e -✓-<✓<s✓si✓it✓te✓e>✓>
The first form migrates the process or job to
Cornell 6.03.00 20 November 1992 34
TCSH(1) TCSH(1)
the site specified or the default site deter-
mined by the system path. The second form, is
equivalent to 'migrate -<site> $$', i.e.
migrates the current process to the site speci-
fied. Note: migrating _✓t_✓c_✓s_✓h itself can cause
unexpected behavior, since the shell does not
like to lose its tty.
In addition, jobs will print the site the job is execut-
ing.
_✓D_✓o_✓m_✓a_✓i_✓n_✓/_✓O_✓S _✓S_✓u_✓p_✓p_✓o_✓r_✓t
i✓in✓nl✓li✓ib✓b <✓<s✓sh✓ha✓ar✓re✓ed✓d-✓-l✓li✓ib✓br✓ra✓ar✓ry✓y>✓> .✓..✓..✓.
Inlib adds shared libraries to the current environ-
ment. There is no way to remove them...
r✓ro✓oo✓ot✓tn✓no✓od✓de✓e /✓//✓/<✓<n✓no✓od✓de✓en✓na✓am✓me✓e>✓>
Change the name of the current rootnode. From now
on, _✓/ will resolve to _✓/_✓/_✓<_✓r_✓o_✓o_✓t_✓n_✓o_✓d_✓e_✓>
v✓ve✓er✓r [✓[<✓<s✓sy✓ys✓st✓ty✓yp✓pe✓e>✓>]✓] [✓[<✓<c✓co✓om✓mm✓ma✓an✓nd✓d>✓>]✓]
Without arguments, print _✓$_✓S_✓Y_✓S_✓T_✓Y_✓P_✓E_✓; with the
_✓<_✓s_✓y_✓s_✓t_✓y_✓p_✓e_✓> provided, set _✓S_✓Y_✓S_✓T_✓Y_✓P_✓E to the one pro-
vided. Valid systypes are bsd4.3 and sys5.3. If a
_✓<_✓c_✓o_✓m_✓m_✓a_✓n_✓d_✓> is argument is given, then _✓<_✓c_✓o_✓m_✓m_✓a_✓n_✓d_✓> is
executed under the _✓<_✓s_✓y_✓s_✓t_✓y_✓p_✓e_✓> specified.
_✓M_✓a_✓c_✓h
s✓se✓et✓tp✓pa✓at✓th✓h <✓<p✓pa✓at✓th✓h-✓-s✓sp✓pe✓ec✓c>✓> .✓..✓..✓.
XXX: What does it do?
_✓M_✓a_✓s_✓s_✓c_✓o_✓m_✓p_✓/_✓R_✓T_✓U
u✓un✓ni✓iv✓ve✓er✓rs✓se✓e <✓<u✓un✓ni✓iv✓ve✓er✓rs✓se✓e-✓-s✓sp✓pe✓ec✓c>✓> .✓..✓..✓.
Sets the current universe to the specified parame-
ter.
_✓C_✓o_✓n_✓v_✓e_✓x_✓/_✓O_✓S
w✓wa✓ar✓rp✓p [✓[<✓<u✓un✓ni✓iv✓ve✓er✓rs✓se✓e-✓-s✓sp✓pe✓ec✓c>✓>]✓] .✓..✓..✓.
Without arguments prints the current value of the
universe. With a universe argument it sets the cur-
rent universe to the value of the argument.
Cornell 6.03.00 20 November 1992 35
TCSH(1) TCSH(1)
2✓29✓9.✓. W✓WI✓IN✓ND✓DO✓OW✓W S✓SI✓IZ✓ZE✓E T✓TR✓RA✓AC✓CK✓KI✓IN✓NG✓G
On systems that support SIGWINCH or SIGWINDOW, _✓t_✓c_✓s_✓h adapts
to window resizing automatically and adjusts the environ-
ment variables LINES and COLUMNS if set. Also if the envi-
ronment variable TERMCAP contains li#, and co# fields,
these will be adjusted also to reflect the new window
size.
3✓30✓0.✓. I✓IN✓NP✓PU✓UT✓T F✓FI✓IL✓LE✓ES✓S
On startup _✓t_✓c_✓s_✓h will try to source _✓/_✓e_✓t_✓c_✓/_✓c_✓s_✓h_✓._✓c_✓s_✓h_✓r_✓c and then
_✓/_✓e_✓t_✓c_✓/_✓c_✓s_✓h_✓._✓l_✓o_✓g_✓i_✓n if the shell is a login shell. Then it will
try to source _✓$_✓H_✓O_✓M_✓E_✓/_✓._✓t_✓c_✓s_✓h_✓r_✓c and then _✓$_✓H_✓O_✓M_✓E_✓/_✓._✓c_✓s_✓h_✓r_✓c if
_✓$_✓H_✓O_✓M_✓E_✓/_✓._✓t_✓c_✓s_✓h_✓r_✓c is not found. Then it will source
_✓$_✓H_✓O_✓M_✓E_✓/_✓._✓l_✓o_✓g_✓i_✓n if the shell is a login shell. On exit _✓t_✓c_✓s_✓h
will source first _✓/_✓e_✓t_✓c_✓/_✓c_✓s_✓h_✓._✓l_✓o_✓g_✓o_✓u_✓t and then _✓$_✓H_✓O_✓M_✓E_✓/_✓._✓l_✓o_✓g_✓o_✓u_✓t
if the shell was a login shell.
Note: On _✓c_✓o_✓n_✓v_✓e_✓x_✓o_✓s_✓, _✓s_✓t_✓e_✓l_✓l_✓i_✓x and _✓I_✓N_✓T_✓E_✓L the names of the sys-
tem default files are _✓/_✓e_✓t_✓c_✓/_✓c_✓s_✓h_✓r_✓c _✓, _✓/_✓e_✓t_✓c_✓/_✓l_✓o_✓g_✓i_✓n and
_✓/_✓e_✓t_✓c_✓/_✓l_✓o_✓g_✓o_✓u_✓t respectively. On the NeXT the names are also
different: _✓/_✓e_✓t_✓c_✓/_✓c_✓s_✓h_✓r_✓c_✓._✓s_✓t_✓d _✓, _✓/_✓e_✓t_✓c_✓/_✓l_✓o_✓g_✓i_✓n_✓._✓s_✓t_✓d and
_✓/_✓e_✓t_✓c_✓/_✓l_✓o_✓g_✓o_✓u_✓t_✓._✓s_✓t_✓d Finally on _✓i_✓r_✓i_✓x_✓, _✓A_✓/_✓U_✓X_✓, _✓A_✓M_✓I_✓X_✓, and the _✓c_✓r_✓a_✓y
only the file _✓/_✓e_✓t_✓c_✓/_✓c_✓s_✓h_✓r_✓c is executed if the shell is a
login shell.
3✓31✓1.✓. C✓CO✓OM✓MM✓MA✓AN✓ND✓D L✓LI✓IN✓NE✓E O✓OP✓PT✓TI✓IO✓ON✓NS✓S
This section describes options that are either undocu-
mented in _✓c_✓s_✓h (*) or present only in _✓t_✓c_✓s_✓h_✓. (+)
_✓-_✓d Force load of directory stack. (+)
_✓-_✓D_✓n_✓a_✓m_✓e_✓[_✓=_✓v_✓a_✓l_✓u_✓e_✓]
Set environment variable name to value. (Domain/OS
only) (+)
_✓-_✓F Use fork() instead of vfork() to spawn processes.
(Convex/OS only) (+)
_✓-_✓l Make _✓t_✓c_✓s_✓h behave like a login shell. (+)
_✓-_✓m Allow reading of a .cshrc that does not belong to the
effective user. Newer versions of _✓s_✓u_✓(_✓1_✓) can pass that
to the shell. (some versions of csh have it) (+*)
_✓-_✓q Make the shell accept SIGQUIT, and behave when it is
used under a debugger. Job control is disabled. (*)
3✓32✓2.✓. H✓HI✓IS✓ST✓TO✓OR✓RY✓Y A✓AN✓ND✓D V✓VA✓AR✓RI✓IA✓AB✓BL✓LE✓E M✓MO✓OD✓DI✓IF✓FI✓IE✓ER✓R E✓EN✓NH✓HA✓AN✓NC✓CE✓EM✓ME✓EN✓NT✓TS✓S
_✓T_✓c_✓s_✓h accepts more than one variable modifier per variable
or history expansion. For example, in _✓c_✓s_✓h_✓(_✓1_✓) the
Cornell 6.03.00 20 November 1992 36
TCSH(1) TCSH(1)
following command expands to:
% set a=/usr/local/foo.bar.baz
% echo $a:t:r:e
foo.bar.baz:r:e
but in _✓t_✓c_✓s_✓h_✓:
> set a=/usr/local/foo.bar.baz
> echo $a:t:r:e
bar
This bug fix changes slightly the input syntax of _✓c_✓s_✓h_✓,
causing expressions of the form to have invalid syntax:
> set a=/usr/local/foo.bar.baz
> echo $a:t:$cwd
Unknown variable modifier.
Which is the correct behavior, since after the second
colon a variable modifier is expected and `$' is found.
Expressions like this should be re-written as:
> echo ${a:t}:$cwd
_✓T_✓c_✓s_✓h can also use the _✓l and _✓u modifiers to change the case
of a word.
Also _✓t_✓c_✓s_✓h has an additional : character _✓a which applies
the current modifier multiple times in the same word, in
the same way _✓g applies the modifier once in each word:
> set foo=(a:b:c d:e:f)
> echo $foo:s/:/ /
a b:c d:e:f
> echo $foo:gs/:/ /
a b:c d e:f
> echo $foo:as/:/ /
a b c d:e:f
> echo $foo:ags/:/ /
a b c d e f
The _✓c_✓s_✓h expert will notice in the above example another
_✓t_✓c_✓s_✓h enhancement. In _✓c_✓s_✓h the _✓s modifier does not work for
variables.
The _✓a character works correctly with other modifiers, for
example:
> echo $host
tesla.ee.cornell.edu
> echo $host:r
tesla.ee.cornell
> echo $host:ar
Cornell 6.03.00 20 November 1992 37
TCSH(1) TCSH(1)
tesla
_✓N_✓o_✓t_✓e_✓: The _✓a character causes a modifier to be applied to a
word repeatedly until the modifier fails. This can lead to
an infinite loop in the current implementation when used
with the _✓s modifier. For example :as/f/ff/ will never ter-
minate. This behavior might change in the future.
3✓33✓3.✓. P✓PR✓RO✓OG✓GR✓RA✓AM✓MM✓MA✓AB✓BL✓LE✓E C✓CO✓OM✓MP✓PL✓LE✓ET✓TI✓IO✓ON✓N
The new _✓c_✓o_✓m_✓p_✓l_✓e_✓t_✓e and _✓u_✓n_✓c_✓o_✓m_✓p_✓l_✓e_✓t_✓e builtins can change the
behavior of the listing and file-completion in tcsh. For
example some commands like _✓c_✓d_✓, _✓p_✓u_✓s_✓h_✓d_✓, _✓p_✓o_✓p_✓d _✓, _✓m_✓k_✓d_✓i_✓r_✓(_✓1_✓)_✓,
_✓r_✓m_✓d_✓i_✓r_✓(_✓1_✓) accept only directories as arguments. Normally
_✓t_✓c_✓s_✓h when asked to list or complete an argument for those
commands takes into account all the files and not only
directories. This behavior can be changed by telling _✓t_✓c_✓s_✓h
that these commands only expect directory arguments:
> complete cd 'n/*/d/'
The above command tells _✓t_✓c_✓s_✓h to complete any following
word with a directory.
The syntax for the _✓c_✓o_✓m_✓p_✓l_✓e_✓t_✓e and _✓u_✓n_✓c_✓o_✓m_✓p_✓l_✓e_✓t_✓e builtins is:
_✓c_✓o_✓m_✓p_✓l_✓e_✓t_✓e _✓[_✓<_✓c_✓o_✓m_✓m_✓a_✓n_✓d_✓-_✓p_✓a_✓t_✓t_✓e_✓r_✓n_✓> _✓[_✓<_✓c_✓o_✓m_✓p_✓l_✓e_✓t_✓i_✓o_✓n_✓-_✓a_✓r_✓g_✓u_✓m_✓e_✓n_✓t_✓>_✓]_✓]
_✓u_✓n_✓c_✓o_✓m_✓p_✓l_✓e_✓t_✓e _✓<_✓c_✓o_✓m_✓m_✓a_✓n_✓d_✓-_✓p_✓a_✓t_✓t_✓e_✓r_✓n_✓>
Completion arguments are matched in turn from left to
right and the first successful match is returned. There
are three different completion arguments, modeled after
the _✓s_✓e_✓d_✓(_✓1_✓) substitute command and they are of the form:
<✓<c✓co✓om✓mm✓ma✓an✓nd✓d>✓>/✓/<✓<m✓ma✓at✓tc✓ch✓h-✓-p✓pa✓at✓tt✓te✓er✓rn✓n>✓>/✓/<✓<c✓co✓om✓mp✓pl✓le✓et✓te✓e-✓-a✓ac✓ct✓ti✓io✓on✓n>✓>/✓/[✓[<✓<s✓su✓uf✓ff✓fi✓ix✓x>✓>|✓|/✓/]✓]
The five commands available are:
p✓p This specifies position-dependent completion. The
matching pattern is a numeric range similar to the
one used to index shell variables. If the current
word is within that range, then the completion
action is taken. For example:
> complete cd 'p/1/d/'
completes only the first argument of 'cd' with a
directory. A special useful case of position-
dependent completion can be used to disambiguate
command completion:
> set autolist
> co[TAB]
complete compress
Cornell 6.03.00 20 November 1992 38
TCSH(1) TCSH(1)
> complete -co* 'p/0/(complete)/'
> co[TAB]
> complete _
The above command tells the completion mechanism to
match any word on position 0, that matches the pat-
tern _✓c_✓o_✓* _✓. If a match is found, the word is
replaced with the literal pattern "complete". The
leading '-' in the pattern signifies that this com-
pletion is to be used only with ambiguous commands.
n✓n,✓,N✓N This command specifies next-word completions. The
matching pattern in this case is a shell pattern
that must match the previous word on the command
line _✓(_✓n_✓)_✓, or the word before that _✓(_✓N_✓)_✓. For exam-
ple:
> complete find 'n/-user/u/'
Here the argument of the find command which follows
the -user argument is completed from the list of
users.
c✓c,✓,C✓C The last two completion commands complete the cur-
rent word. The matching pattern in this case must
match the prefix of the current word. For example:
> complete cc 'c/-I/d/'
completes the the word containing -I from the list
of directories. While `✓`c✓c'✓' discards the matched
prefix, `✓`C✓C'✓' keeps it and applies the completion
using it.
So far the _✓d_✓, _✓u_✓, _✓(_✓w_✓o_✓r_✓d_✓) completion actions have been men-
tioned. The complete list of completion actions are:
C Complete completions
S Complete signals
a Complete aliases
b Complete binding
c Complete command
d Complete directory
e Complete environment variable
f Complete file or path component
j Complete jobs
l Complete limits
n Complete nothing
p Complete files using the supplied pathname prefix
s Complete shell variable
t Complete non directory `text' filename
v Complete any variable
u Complete username
Cornell 6.03.00 20 November 1992 39
TCSH(1) TCSH(1)
x Explain what argument when listing is requested.
$var Complete using words from variable
(...) Complete using words from list
`...` Complete evaluating word list from the output of command.
All the above completion actions, except _✓x_✓, _✓$_✓v_✓a_✓r_✓, _✓(_✓._✓._✓._✓)_✓,
and _✓`_✓._✓._✓._✓` can have an additional shell pattern which must
match the files to be completed, separated from the action
with a ':'. The _✓'_✓x_✓' completion action instead expects the
explanation string specified this way. For example, in
the C compiler, it makes sense to complete only files that
the compiler understands:
> complete cc 'n/*/f:*.[cao]/'
It is also useful to exclude files from the completion
list. Normally _✓t_✓c_✓s_✓h will expand the following command:
> set fignore=(.o)
> ls
foo.c foo.o
> vi f[TAB]
> vi foo.c
> rm f[TAB]
> rm foo.c
A better way to do this is to use the _✓c_✓o_✓m_✓p_✓l_✓e_✓t_✓e builtin to
protect precious files:
> complete rm 'n/*/f:^*.{c,h,cc,C,tex,1,man,l,y}/'
> ls
foo.c foo.o
> vi f[TAB]
> vi foo.c
> rm f[TAB]
> rm foo.o
Note that _✓f_✓i_✓g_✓n_✓o_✓r_✓e is not used when a shell pattern is
specified in a completion action.
Other commands don't expect files as arguments, so the
completion builtin can be used to change the list of items
to be completed:
> complete man 'n/*/c/' # complete commands
> complete which 'n/*/c/'
> complete dbx 'p/2/(core)/' 'n/*/c/'
> complete alias 'p/1/a/' # complete aliases
> complete set 'p/1/s/' # complete variables
> complete finger 'p/1/u/' # complete user-names
Note that in the _✓d_✓b_✓x example, the positional completion is
specified before the next word completion. Since comple-
tions are evaluated from left to right, if the next word
Cornell 6.03.00 20 November 1992 40
TCSH(1) TCSH(1)
completion was specified first it would always match and
the positional completion would never be executed. This is
a common mistake when defining a completion.
In some cases the list needs to be customized or dynami-
cally generated.
> set hostnames=(prep.ai.mit.edu tesla.ee.cornell.edu)
> complete rlogin 'p/1/$hostnames/'
Consider a complex example using matching patterns to
direct argument dependent completions:
> complete find 'n/-fstype/(nfs 4.2)/' 'n/-name/f/' \
'n/-type/(c b d f p l s)/' 'n/-user/u/' 'n/-exec/c/' \
'n/-ok/c/' 'n/-cpio/f/' 'n/-ncpio/f/' 'n/-newer/f/' \
'c/-/(fstype name perm prune type user nouser \
group nogroup size inum atime mtime ctime exec \
ok print ls cpio ncpio newer xdev depth)/' \
'n/*/d/'
The words following the _✓-_✓f_✓s_✓t_✓y_✓p_✓e and _✓-_✓t_✓y_✓p_✓e arguments is to
be completed from the lists specified. The word following
the _✓-_✓n_✓a_✓m_✓e_✓, _✓-_✓c_✓p_✓i_✓o_✓, _✓-_✓n_✓c_✓p_✓i_✓o_✓, and _✓-_✓n_✓e_✓w_✓e_✓r arguments are to be
completed using files or directory components. The word
following the _✓-_✓u_✓s_✓e_✓r argument will be completed from the
list of user names of the system, and the word following
the _✓-_✓e_✓x_✓e_✓c and _✓-_✓o_✓k arguments will be completed from the
list of commands. The fourth line specifies how the cur-
rent word will be completed if it starts with a _✓-_✓. Note
that the pattern of this completion argument refers to the
_✓c_✓u_✓r_✓r_✓e_✓n_✓t word and not to the _✓p_✓r_✓e_✓v_✓i_✓o_✓u_✓s word, like before.
Finally the last line in the find completion matches all
the remaining cases and requires a directory component.
> cd /usr
> set autolist
> find [TAB]
bin/ include/ lib/ local/ man/ src/
> find -[TAB]
atime depth group mtime newer ok prune user
cpio exec inum name nogroup perm size xdev
ctime fstype ls ncpio nouser print type
> find -u[TAB]
> find -user [TAB]
christos root
> find -user c[TAB]
> find -user christos
Another useful feature is to override the default suffix
rules. For example:
> complete rcp 'c/*:/f/' 'p/1/$hosts/:'
> complete finger 'c/*@/$hosts/' 'p/1/u/@'
Cornell 6.03.00 20 November 1992 41
TCSH(1) TCSH(1)
completes from $hosts appending a `:' and then begins
expanding files, where finger expands user-names appending
an `@' and then begins expanding hosts.
Another exotic example that makes use of dynamic command
execution is:
> complete talk p/1/'`users | tr " " "\012" | uniq`'/ \
n/\*/\`who\ \|\ grep\ \$:1\ \|\ awk\ \'\{\ print\ \$2\ \}\'\`/
Here we want to get a list of the active users, as an
argument to talk, then we want to pick the user, and find
his tty... Note that there is no quoting performed inside
the completion patterns. If the character '/' is used in
the matched pattern, then another punctuation character
can be used as a separator. The only pattern recognized is
$✓$:✓:<✓<n✓nu✓um✓mb✓be✓er✓r>✓> which is substituted by the n'th word of the
current line.
Notes:
1. The completion command-patterns are overridden when
the internal parsing mechanism determines that the
completion is a login name, or a variable.
2. This is an experimental feature and the syn-
tax/behavior may change in future versions.
F✓FY✓YI✓I
This shell uses CBREAK mode but takes typed-ahead charac-
ters anyway. You can still use _✓s_✓t_✓t_✓y(1) to set some of the
modes of your terminal (but not bindings).
This shell will restore your tty to a sane mode if it
appears to return from some command in raw, CBREAK, or
noecho mode. This behavior can be changed using _✓s_✓e_✓t_✓t_✓y_✓.
E✓EN✓NH✓HA✓AN✓NC✓CE✓ED✓D F✓FI✓IL✓LE✓E I✓IN✓NQ✓QU✓UI✓IR✓RI✓IE✓ES✓S
_✓C_✓s_✓h allows the following file inquiries that can appear as
primitive operands in expressions. They are for the form
_✓-_✓l _✓<_✓f_✓i_✓l_✓e_✓n_✓a_✓m_✓e_✓>_✓.
r read access
w write access
x execute access
e existence
o ownership
z zero size
f plain file
d directory
l symbolic link *
Cornell 6.03.00 20 November 1992 42
TCSH(1) TCSH(1)
_✓T_✓c_✓s_✓h defines also the following:
c character special file
b block special file
p named pipe (fifo) *
u set-user-ID bit is set
g set-group-ID bit is set
k sticky bit is set
s socket special file *
t open file descriptor for terminal device [a number]
X executable in the path or shell builtin
Notes: On systems without the file types indicated by _✓*
the file inquiry operands return false. In the version of
_✓c_✓s_✓h appearing on the Silicon Graphics IRIX, -s is true
when the file is not zero size. _✓T_✓c_✓s_✓h is *not* compatible
with that.
E✓EN✓NV✓VI✓IR✓RO✓ON✓NM✓ME✓EN✓NT✓T
HPATH -- path to look for command documentation
LANG -- used to give preferred character environment (see
NLS)
LC_CTYPE -- used to change only ctype character handling
(see NLS)
NOREBIND -- inhibits rebinding of printable characters to
self-insert-command
PATH -- path to look for command execution
SHLVL -- current shell level nesting
TERM -- used to tell how to handle the terminal
LINES -- Number of lines in terminal (see WINDOW SIZE)
COLUMNS -- Number of columns in terminal (see WINDOW SIZE)
TERMCAP -- Terminal capability string (see WINDOW SIZE)
SYSTYPE -- The current system type (Domain OS only)
N✓NE✓EW✓W S✓SH✓HE✓EL✓LL✓L V✓VA✓AR✓RI✓IA✓AB✓BL✓LE✓ES✓S
a✓ad✓dd✓ds✓su✓uf✓ff✓fi✓ix✓x add a / for directories, and a space for normal
files when complete matches a name exactly. If
unset don't add anything extra.
a✓am✓mp✓pm✓m show all times in 12 hour, AM/PM format.
a✓au✓ut✓to✓oc✓co✓or✓rr✓re✓ec✓ct✓t
Correct mis-spelled path components automati-
cally before attempting completion.
a✓au✓ut✓to✓oe✓ex✓xp✓pa✓an✓nd✓d
invoke the expand-history function automatically
on completion.
a✓au✓ut✓to✓ol✓li✓is✓st✓t list possibilities on an ambiguous completion.
Cornell 6.03.00 20 November 1992 43
TCSH(1) TCSH(1)
a✓au✓ut✓to✓ol✓lo✓og✓go✓ou✓ut✓t
The first word indicates number of minutes of
inactivity before automatic logout. The
optional second word indicates the number of
minutes of inactivity after which the user will
be prompted for his login password to enter a
command.
b✓ba✓ac✓ck✓ks✓sl✓la✓as✓sh✓h_✓_q✓qu✓uo✓ot✓te✓e
makes the backslash quote \, ', and ". This
option changes the parsing mechanism for tcsh,
and it can cause syntax errors in _✓c_✓s_✓h scripts.
c✓co✓or✓rr✓re✓ec✓ct✓t automatically try to correct the spelling of
commands. Must be set to either correct=cmd,
only command name will be corrected, or cor-
rect=all, the whole line will be corrected.
d✓de✓ex✓xt✓tr✓ra✓ac✓ct✓t extract a directory on pushd rather than rotat-
ing.
d✓di✓ir✓rs✓sf✓fi✓il✓le✓e If set, it contains the full path-name where a
directory stack file is read/written. It
defaults to $home/.cshdirs. This file is exe-
cuted last after .cshrc and .login to restore
the directory stack.
d✓di✓ir✓rs✓st✓ta✓ac✓ck✓k If set, it contains an array of all the directo-
ries on the directory stack. $dirstack[1] is the
current working directory, $dirstack[2] the
first directory on the stack etc. Setting
$dirstack resets all the stack entries, but the
current working directory which is preserved.
d✓du✓un✓ni✓iq✓qu✓ue✓e Push only directories that are not already in
the directory stack.
e✓ec✓ch✓ho✓o_✓_s✓st✓ty✓yl✓le✓e
Set the style of the builtin echo. Valid values
are:
_✓b_✓s_✓d _✓: if the first argument is -n, don't echo a
newline.
_✓s_✓y_✓s_✓v _✓: recognize \ escape sequences in echo
strings.
_✓b_✓o_✓t_✓h _✓: recognize both -n and \ escape sequences.
_✓n_✓o_✓n_✓e _✓: the purist's echo.
e✓ed✓di✓it✓t use the input editor, set by default.
f✓fi✓ig✓gn✓no✓or✓re✓e list of file name suffixes (e.g. .o, ~) to
Cornell 6.03.00 20 November 1992 44
TCSH(1) TCSH(1)
ignore during complete.
g✓gi✓id✓d the current real group id.
h✓hi✓is✓st✓tl✓li✓it✓t If set, history lines in the editor will be
shown with its literal value (that is the line
as it was input) instead of the shells lexical
version. The current history line can be toggled
between literal and lexical with the toggle-
literal-history function. History lines saved
at shell exit are also saved as this variable
indicates.
h✓hi✓is✓st✓tf✓fi✓il✓le✓e If set, it contains the full path-name where a
history file is read/written. It defaults to
$home/.history. This is useful when sharing the
same home directory in different machines, or if
one wants to save all the histories in the tty
sessions. It is usually set in .cshrc for inter-
active shells, because history is sourced
between .cshrc and .login so that it is avail-
able from .login.
h✓hi✓is✓st✓to✓or✓ry✓y The first word of the history variable indicates
the number of history events to be saved. The
optional second word indicates the format his-
tory is printed (Defaults to "%h\t%T\t%R\n").
i✓in✓np✓pu✓ut✓tm✓mo✓od✓de✓e Can be set to either _✓i_✓n_✓s_✓e_✓r_✓t or _✓o_✓v_✓e_✓r_✓w_✓r_✓i_✓t_✓e to con-
trol the line editing behavior, as described in
section 1.
l✓li✓is✓st✓tj✓jo✓ob✓bs✓s list all jobs when suspending. set
listjobs=long, produces long format.
l✓li✓is✓st✓tl✓li✓in✓nk✓ks✓s Resolve symbolic links when listing files so
that the correct filetype is shown.
l✓li✓is✓st✓tm✓ma✓ax✓x maximum number of items to list without asking
first.
m✓ma✓at✓tc✓ch✓hb✓be✓ee✓ep✓p control beeping on completion. With match-
beep=nomatch, completion only beeps when there
is no match, with matchbeep=ambiguous, beeps
also when there are multiple matches, with
matchbeep=notunique, beeps when there is one
exact and other longer matches, with match-
beep=never, it never beeps.
n✓no✓ob✓be✓ee✓ep✓p Disables beeping completely.
n✓no✓ok✓ka✓an✓nj✓ji✓i If kanji support is enable, setting this vari-
able disables it, so that the meta key can be
used.
Cornell 6.03.00 20 November 1992 45
TCSH(1) TCSH(1)
n✓no✓os✓st✓ta✓at✓t An list of directories that should not be
stat'ed during a completion operation. Some
directories e.g. "/afs", can take too much time
to complete a _✓s_✓t_✓a_✓t_✓(_✓2_✓) operation, making them
prime candidates for membership in this list.
o✓oi✓id✓d The organization id number (Domain OS only).
p✓pr✓ri✓in✓nt✓te✓ex✓xi✓it✓tv✓va✓al✓lu✓ue✓e
if an interactive program exits non-zero, print
the exit value.
p✓pr✓ro✓om✓mp✓pt✓t the string to prompt with.
p✓pr✓ro✓om✓mp✓pt✓t2✓2 the string to prompt for while and for loops
with.
p✓pr✓ro✓om✓mp✓pt✓t3✓3 the string to prompt with when automatic
spelling correction has corrected a command
line.
p✓pu✓us✓sh✓hd✓dt✓to✓oh✓ho✓om✓me✓e
make pushd with no args do a "pushd ~" (like cd
does).
p✓pu✓us✓sh✓hd✓ds✓si✓il✓le✓en✓nt✓t
do not print the dir stack on every pushd and
popd.
r✓re✓ec✓ce✓ex✓xa✓ac✓ct✓t recognize exact matches even if they are ambigu-
ous.
r✓re✓ec✓co✓og✓gn✓ni✓iz✓ze✓e_✓_o✓on✓nl✓ly✓y_✓_e✓ex✓xe✓ec✓cu✓ut✓ta✓ab✓bl✓le✓es✓s
list choices of commands only displays files in
the path that are executable (slow).
r✓rm✓ms✓st✓ta✓ar✓r Prompt the user before execution of `rm *'.
s✓sa✓av✓ve✓ed✓di✓ir✓rs✓s Before exiting, create a file called
$HOME/.cshdirs that contains the necessary com-
mands to restore the current directory stack.
_✓T_✓c_✓s_✓h will read this file during startup and
restore the directory stack.
s✓sa✓av✓ve✓eh✓hi✓is✓st✓t number of history items to save between login
sessions. If it is just set, the number of
items is taken from $history.
s✓sh✓hl✓lv✓vl✓l Integer value indicating the number of nested
shells. On login shells the level is reset to 1.
s✓sh✓ho✓ow✓wd✓do✓ot✓ts✓s show hidden files in list and complete opera-
tions. If it is set to -A, then "." and ".." are
not displayed, similarly to the BSD ls -A.
Cornell 6.03.00 20 November 1992 46
TCSH(1) TCSH(1)
s✓sy✓ym✓ml✓li✓in✓nk✓ks✓s can be set to: _✓c_✓h_✓a_✓s_✓e _✓, in order to resolve the
full path names, _✓i_✓g_✓n_✓o_✓r_✓e _✓, in order to use $cwd
to resolve relative directory references for
builtins. _✓e_✓x_✓p_✓a_✓n_✓d _✓, in order to use $cwd and
rewrite the arguments for commands.
t✓tc✓cs✓sh✓h Contains the current version of the shell as
R.VV.PP. The _✓R indicates the major release num-
ber, the _✓V_✓V the current version and the _✓P_✓P the
patchlevel.
t✓te✓er✓rm✓m the terminal type; see above.
t✓tp✓pe✓er✓ri✓io✓od✓d periodic command wait period (in minutes).
t✓tt✓ty✓y The name of the tty, or empty if not attached to
one.
u✓ui✓id✓d the current real user ID.
v✓ve✓er✓rs✓si✓io✓on✓n the version ID stamp for this _✓t_✓c_✓s_✓h_✓. It con-
tains, the origin of this version of _✓t_✓c_✓s_✓h_✓, the
date this version was released and a string con-
taining a comma separated list of the compile
time options enabled:
8b 7b If tcsh was compiled to be eight bit clean
or not. The default is 8b.
nls Set if tcsh uses the system's NLS, should be
the default for systems that have NLS.
lf Set if tcsh should execute .login before
.cshrc on login shells. Default is not set.
dl Set if tcsh should put . last on the path
for security. Default is set.
vi Set if tcsh's default editor is vi. Default
is unset (emacs)
dtr Set if tcsh should drop dtr on login shells
when exiting. Default is unset.
bye Set if tcsh should accept bye in addition
to logout, and rename log to watchlog.
Default is unset.
al Set if tcsh should determine if autologout
should be enabled. The default is set.
kan Set if tcsh is compiled for Kanji.
(ignore the iso character set.) Default is unset.
sm Set if tcsh was compiled to use the system's malloc.
hb Set if tcsh is emulating #!<program> <args> in
shell script execution
In addition to the above strings, administrators can enter
local strings to indicate differences in the local ver-
sion.
Cornell 6.03.00 20 November 1992 47
TCSH(1) TCSH(1)
v✓vi✓is✓si✓ib✓bl✓le✓eb✓be✓el✓ll✓l
use the visible bell (screen flash) rather than
audible bell.
w✓wa✓at✓tc✓ch✓h list of events to watch.
w✓wh✓ho✓o format string for the printouts generated when
_✓w_✓a_✓t_✓c_✓h is set.
w✓wo✓or✓rd✓dc✓ch✓ha✓ar✓rs✓s list of non-alphanumeric characters considered
part of a word for the purpose of the forward-
word, backward-word etc functions -- defaults to
"*?_-.[]~=".
N✓NE✓EW✓W S✓SP✓PE✓EC✓CI✓IA✓AL✓L A✓AL✓LI✓IA✓AS✓SE✓ES✓S
_✓c_✓w_✓d_✓c_✓m_✓d the command is run after every change of working
directory.
_✓p_✓e_✓r_✓i_✓o_✓d_✓i_✓c the command to be run every _✓t_✓p_✓e_✓r_✓i_✓o_✓d minutes.
_✓p_✓r_✓e_✓c_✓m_✓d the command to be run prior to printing each
prompt.
_✓b_✓e_✓e_✓p_✓c_✓m_✓d the command to be run every time _✓t_✓c_✓s_✓h wants to
echo the terminal bell.
S✓SE✓EE✓E A✓AL✓LS✓SO✓O
xterm(1), twm(1), csh(1), chsh(1), termcap(5), termio(7)
B✓BU✓UG✓GS✓S
The screen update for lines longer than the screen width
is very poor if the terminal cannot move the cursor up
(i.e. terminal type "dumb").
I am certain that there are bugs. Bugs (preferably with
fixes) should be sent to Christos Zoulas (chris-
tos@ee.cornell.edu).
V✓VE✓ER✓RS✓SI✓IO✓ON✓N
This man page documents tcsh 6.03.00 (Cornell) 92/11/20.
A✓AU✓UT✓TH✓HO✓OR✓RS✓S
Ken Greer, HP Labs, 1981
Wrote the command completion.
Mike Ellis, Fairchild, 1983
Added command name recognition/completion.
Paul Placeway, Ohio State CIS dept., 1983
Added the command line editor.
Cornell 6.03.00 20 November 1992 48
TCSH(1) TCSH(1)
Rayan Zachariassen, University of Toronto, 1984
Added the builtin _✓w_✓h_✓i_✓c_✓h feature to the editor, and the
code for _✓l_✓s_✓-_✓F _✓. Also numerous bug fixes, modifications,
and performance enhancements.
Chris Kingsley, Caltech
Wrote the fast storage allocator routines (nmalloc.c).
Karl Kleinpaste, CCI 1983-4
Added special aliases, directory stack extraction stuff,
login/logout watch, and scheduled events. Also came up
with the idea of the new prompt format.
Paul Placeway, Ohio State CIS dept., 1987
Re-wrote the editor, cleaned up other code, and added the
prompt routines, added to the syntax for file name expres-
sions, and sped up the shell some.
Chris Grevstad, TRW, 1987
Ported the 4.3 csh sources to tcsh.
Christos S. Zoulas, Cornell U. EE dept., 1987-92
ported tcsh to HPUX, and System V rel. 2 and 3 and wrote a
SysV version of getwd.c. Added SHORT_STRINGS support. New
version of sh.glob.c.
James J Dempsey, BBN, 1988, and Paul Placeway, OSU, 1988
Re-ported tcsh to A/UX.
B✓BU✓UG✓GF✓FI✓IX✓XE✓ES✓S A✓AN✓ND✓D E✓EN✓NH✓HA✓AN✓NC✓CE✓EM✓ME✓EN✓NT✓TS✓S
Harry C. Pulley, 1992
Coherent port
Andy Phillips, Mullard Space Science Lab U.K., 1992
VMS-POSIX port.
Beto Appleton, IBM Corp., 1992
Walking process group fixes, lots of misc csh bug fixes,
POSIX file tests, POSIX SIGHUP.
Scott Bolte, Cray Computer Corp., 1992
CSOS port.
Kaveh R. Ghazi, Rutgers University, 1992
Fixes and Ports for Tek, m88k, Titan, Masscomp.
Mark Linderman, Cornell University, 1992
OS/2 Port
Mika Liljeberg, liljeber@kruuna.Helsinki.FI, 1992
Linux port.
Scott Krotz, Motorola, 1991
Cornell 6.03.00 20 November 1992 49
TCSH(1) TCSH(1)
Minix port.
David Dawes, Sydney U. Australia, Physics dept., 1991
SVR4 job control fixes. (reverse pipeline startup code,
and signal fixes).
Jose Sousa, Interactive Systems Corp., 1991
Extended vi fixes. Added delete command in vi.
Marc Horowitz, MIT, 1991
Ansification fixes, new exec hashing code, imake fixes,
where builtin.
Eric Schnoebelen, Convex, 1990
Convex support, lots of csh bug fixes, save and restore of
directory stack.
Jaap Vermeulen, Sequent, 1990-91
Vi mode fixes, expand-line, window change fixes, ported to
symmetry machines.
Ron Flax, Apple, 1990
Ported again to A/UX 2.0
Dan Oscarsson, LTH Sweden, 1990
NLS support and simulated for non NLS sites. Correction
of file names also handles the case when the / is replaced
by another character. The editor does not switch into
cbreak mode unless needed. The shell will not use charac-
ter attributes when output is not to a tty.
Johan Widen, SICS Sweden, 1990
Shell level variable, mach support, correct-line, 8-bit
printing.
Matt Day, Sanyo Icon, 1990
Added POSIX termio support; Fixed limit stuff for SysV.
Hans J. Albertsson (Sun Sweden)
Added the ampm variable handling, DING!, and the settc and
telltc builtins.
Michael Bloom
Fixed some of the interrupt handling.
Michael Fine, Digital Equipment Corp
added the extended key support.
Daniel Long, NNSC, 1988
Added the wordchars variable.
George Hartzell, MCD Biology, University of Colorado-
Boulder, 1988
Fixed the always resetting to DEL bug.
Cornell 6.03.00 20 November 1992 50
TCSH(1) TCSH(1)
Patrick Wolfe, Kuck and Associates, Inc., 1988
Cleaned up VI mode and wrote the new editor description
(in section 1).
Jak Kirman, 1988
Fixed the SunOS 4 giant stack allocation bug.
Bruce Robertson, Tektronix, 1989
Fixed setting erase and kill (again).
David C Lawrence, Rensselaer Polytechnic Institute, 1989
Added "autolist" variable and code to list possibilities
on ambiguous completion.
Martin Boyer, Institut de recherche d'Hydro-Quebec, 1991.
Modified "autolist" variable and code to give options on
beeping behavior. Modified the history search to search
for the whole string from the beginning of the line to the
cursor.
Alec Wolman, DEC, 1989
Added code to allow newlines in the prompt.
Matt Landau, BBN, 1989
Fixed YP bugs on Suns, added .tcshrc stuff.
Ray Moody, Purdue Physics, 1989
Added the code to do magic spacebar history expansion.
Mordechai ????, Intel, 1989
Re-arranged the printprompt() routine to use a switch(*cp)
(rather than a bunch of ifs), and added a few things to
it.
Josh Siegel, dspo.gov, 1989
Fixed "fg-editor" and added the status line shell vari-
ables "sl" and "el".
Karl Berry, UMB, 1989
Fixed a bug involving environ (in sh.func.c) on NeXT com-
puters.
Michael Greim, Universitaet des Saarlandes, Saarbruecken,
W-Germany,
Fixed the nested backquote bug (yes, you can do it; think
about aliases) in 4.2 csh. This fix was posted to
comp.bugs.4bsd.
Kazuhiro Honda, Department of Computer Science, Keio Uni-
versity, 1989
Added the code for automatic spelling correction, the
prompt3 stuff (the autocorrect prompt), and HOSTTYPE sym-
bols for the Sony NEWS.
Cornell 6.03.00 20 November 1992 51
TCSH(1) TCSH(1)
Paul Placeway, BBN, 1990
Fixed character redrawing code insert bugs, and made
redrawing code handle multiple character movement, insert,
and delete (if it exists). Fixed setting of SHELL.
Per Hedeland, Ellemtel, Sweden, 1990
Various bugfixes and improvements, e.g. in history expan-
sion, autolist, added autoexpand, updated the manual.
T✓TH✓HA✓AN✓NK✓KS✓S T✓TO✓O
A special thanks to: Bryan Dunlap, Clayton Elwell, Karl
Kleinpaste, Bob Manson, Steve Romig, Diana Smetters, Bob
Sutterfield, Mark Verber, Elizabeth Zwicky, and all the
other people at Ohio State for suggestions and encourage-
ment.
Also, thanks to all the people on the net for putting up
with, reporting bugs in, and suggesting new additions to
the old tcsh editor.
Cornell 6.03.00 20 November 1992 52